`

Git 基础

阅读更多

Git 基础

 

取得项目的Git 仓库

有两取得Git 仓库的方法。第一是在存的目下,通过导入所有文件来

新的Git 仓库。第二是从已有的Git 仓库克隆出一个新的仓库

 

从当前目录初始化

对现有的某个始用Git 管理,只需到此目所在的目行:

$ git init

初始化后,在当前目下会出一个名.git 的目,所有Git 需要的数据和源都

存放在个目中。不目前,仅仅是按照既有的构框架初始化好了里所有的文件和目

,但我们还没有始跟踪管理目中的任何一个文件。

如果当前目下有几个文件想要入版本控制,需要先用git add 命令告Git

些文件行跟踪,然后提交:

$ git add *.c

$ git add README

$ git commit -m 'initial project version'

 

酱紫得到了一个实际维护着若干文件Git 仓库

 

从现有仓库克隆

如果想某个目出一份力,可以先把该项目的Git 仓库复制一份出来,就需要

用到git clone 命令。(SVN用的是checkout命令)

 

 

即便服器的磁盘发生故障,用任何一个克隆出来的客端都可以重建服器上的仓库,回到

当初克隆的状

克隆仓库的命令格式git clone [url]

 

如果希望在克隆

候,自己定要新建的目目名称,可以在上面的命令最后指定

git clone [url] [new Program name]

 

Git 支持多数据传输协议git:// 协议http(s):// user@server:/path.git 表示的SSH 传输协议

 

 

记录每次更新到仓库

 

工作目下面的所有文件都不外乎:已跟踪或未跟踪。已跟踪的文件

是指本来就被入版本控制管理的文件,在上次快照中有它记录,工作一段时间后,它

的状可能是未更新,已修改或者已放入存区。而所有其他文件都属于未跟踪文件。它

既没有上次更新的快照,也不在当前的存区域。初次克隆某个仓库时,工作目中的

所有文件都属于已跟踪文件,且状态为未修改。

编辑过某些文件之后,Git 些文件标为已修改。我些修改的文件放到

存区域,然后等最后一次性提交存区域的所有文件更新,如此重

 

 

检查当前文件状态

要确定哪些文件当前于什,可以用git status 命令。如果在克隆仓库之后立即

行此命令,会看到这样nothing to commit (working directory clean)

 

这说明你在的工作目相当干话说,当前没有任何跟踪着的文件,也没有任何

文件在上次提交后更改。此外,上面的信息表明,当前目下没有出任何于未跟踪

的新文件,否Git 会在里列出来。最后,命令还显示了当前所在的分

 

 

Untracked files表示修改的,且在未跟踪文件列表中的文件

跟踪新文件

使用命令git add 始跟踪一个新文件。

再运行git status 命令,会看到文件已被跟踪,并存状

只要在“Changes to be committed行下面的,就明是已存状

 

修改下之前已跟踪的文件,然后再次运行status 命令,会看

这样的状态报

Changed but not updated已跟踪文件

的内容生了化,但没有放到存区。要次更新,需要运行git add 命令运行git add后,看到Changes to be committed

 

忽略某些文件

一般我们总会有些文件无需Git 的管理,也不希望它们总在未跟踪文件列表。

通常都是些自生成的文件,像是日志或者编译过程中建的等等。我可以建一个名

.gitignore 的文件,列出要忽略的文件模式,来看一个简单的例子

 

$ cat .gitignore

*.[oa]

*~

第一行告Git 忽略所有以.o .a 尾的文件。一般这类对象文件和存档文件都是

编译过程中出的,我用不着跟踪它的版本。第二行告Git 忽略所有以波浪符(~

尾的文件,多文本编辑软件(比如Emacs)都用这样的文件名保存副本。此外,你可能

需要忽略logtmp 或者pid ,以及自生成的文档等等。要成一始就置好

.gitignore 文件的习惯,以免将来提交这类无用的文件。

文件.gitignore 的格式范如下:

• 所有空行或者以注符号#开头的行都会被Git 忽略。

• 可以使用准的glob 模式匹配。

• 匹配模式最后跟反斜杠(/明要忽略的是目

• 要忽略指定模式以外的文件或目,可以在模式前加上惊号(!)取反。

 

glob 模式是指shell 所使用的化了的正表达式。星号(*)匹配零个或多个任

意字符;[abc] 匹配任何一个列在方括号中的字符(个例子要匹配一个a,要匹配一

b,要匹配一个c);号(?)只匹配一个任意字符;如果在方括号中使用短划线

隔两个字符,表示所有在两个字符范内的都可以匹配(比如[0-9] 表示匹配所有0

9 的数字)。

 

查看已暂存和未暂存的更新

如果要看具体修改

了什地方,可以用git diff 命令

该命令可以列出当前作的哪些更新没有存?有哪些更新已经暂存起来准

了下次提交? git diff 会使用文件丁的格式示具体添加和除的行

 

此命令比的是工作目中当前文件和存区域快照之的差异,也就是修改之后没有

存起来的化内容。

若要看已经暂存起来的文件和上次提交的快照之的差异,可以用git diff --cached

命令

 

提交更新

次准提交前,先用git status 看下,是不是都已存起来了,然后再运行提交命

git commit

 

这种方式会启文本编辑器以便入本次提交的明。

 

提交后它会告你,当前是在哪个分支

master)提交的,本次提交的完整SHA-1 和是什463dc4f),以及在本次提交

中,有多少文件修订过,多少行添改和

住,提交时记录的是放在存区域的快照,任何存的仍然保持已修改状,可以

在下次提交时纳入版本管理。一次运行提交操作,都是目作一次快照,以后可以回

个状,或者行比

 

跳过使用暂存区域

Git

供了一个跳使用存区域的方式,只要在提交的候,git commit 加上-a 选项Git

就会自把所有已跟踪文件存起来一并提交,从而跳git add 步骤

移除文件

要从Git 中移除某个文件,就必要从已跟踪文件清中移除(确切地,是从存区

域移除),然后提交。可以用git rm 命令完成此工作,并连带从工作目除指定的

文件,这样以后就不会出在未跟踪文件清中了

 

 

如果除之前修改并且已放到

区域的要用选项-f注:即force 的首字母),以防误删除文件后

失修改的内容

 

 

想把文件从Git 仓库除(亦即从存区域移除),但仍然希

望保留在当前工作目中。话说是从跟踪清除。比如一些大型日志文件或者

一堆.a 编译文件,不小心仓库后,要移除跟踪但不除文件,以便稍后在.gitignore

文件中上,用--cached 选项即可git rm cached filename

 

 

移动文件

当你看到Git mv 命令一定会困惑不已。要在Git 文件改名,可以

这么做:

$ git mv file_from file_to

 

运行git mv 就相当于运行了下面三条命令:

$ mv README.txt README

$ git rm README.txt

$ git add README

 

查看提交历史

在提交了若干更新之后,又或者克隆了某个目,想回下提交史,可以使用git log

命令。

 

不用任何参数的git log 会按提交时间列出所有的更新,最近的更新排在最上

面。次更新都有一个SHA-1 和、作者的名字和件地址、提交

,最后缩进一个段落示提交明。

git log 选项可以帮助你搜趣的提交,常用-p 选项开显次提交的内容差异,用-2 则仅显示最近的两次更新--stat仅显要的增改行数统计,--pretty 选项,可以指定使用完全不同于默格式的方式展示提交

史。比如用oneline 个提交放在一行示,在提交数很大非常有用。另外

shortfull fuller 可以用,展示的信息或多或少有些不同

$ git log --pretty=oneline

 

format,可以定制要示的记录格式,这样出便于后期程提取分

析,像这样

$ git log --pretty=format:"%h - %an, %ar : %s"

 

常用的格式占位符写法及其代表的意

选项说明

%H 提交对象(commit)的完整哈希字串

%h 提交对象的简短哈希字串

%T 树对象(tree)的完整哈希字串

%t 树对象的简短哈希字串

%P 父对象(parent)的完整哈希字串

%p 父对象的简短哈希字串

%an 作者(author)的名字

%ae 作者的电子邮件地址

%ad 作者修订日期(可以用-date= 选项定制格式)

%ar 作者修订日期,按多久以前的方式显示

%cn 提交者(committer)的名字

%ce 提交者的电子邮件地址

%cd 提交日期

%cr 提交日期,按多久以前的方式显示

%s 提交说明

 

_作者(author__提交者(committer_究竟有何差,其作者指

的是实际作出修改的人,提交者指的是最后将此工作成果提交到仓库

 

oneline format 时结--graph 选项,可以看到开头多出一些ASCII 字符串表

示的简单图形,形象地展示了个提交所在的分支及其分化衍合情况。

$ git log --pretty=format:"%h %s" --graph

 

限制输出长度

看到-2 了,它只示最近的两条提交,实际上,

-<n> 选项的写法,其中的n 可以是任何自然数,表示仅显示最近的若干条提交。不

践中我是不太用选项的,Git 出所有提交会自动调用分程序(pager),

要看更早的更新只需翻到下即可。

另外有按照时间作限制的选项,比如--since --until

下面的命令列出所有最近

两周内的提交:

$ git log --since=2.weeks

 

 

--author 选项显示指定作者的提交,用

--grep 选项搜索提交明中的关键

 

选项说明

-(n) 仅显示最近的n 条提交

--since, --after 仅显示指定时间之后的提交。

--until, --before 仅显示指定时间之前的提交。

--author 仅显示指定作者相关的提交。

--committer 仅显示指定提交者相关的提交。

 

 

使用图形化工具查阅提交历史

,随Git 一同布的gitk 就是这样

工具。它是用Tcl/Tk 写成的,基本上相当于git log 命令的可化版本,凡是git log

可以用的选项也都能用在gitk 上。在目工作目gitk 命令后就会启

界面。

 

撤消操作

有些操作并不是可以撤消的,所以请务慎小心,一旦失

,就有可能失部分工作成果

 

 

修改最后一次提交

候我提交完了才发现漏掉了几个文件没有加,或者提交信息写了。想要撤消

的提交操作,可以使用--amend 选项重新提交:

$ git commit --amend

 

 

此命令将使用当前的存区域快照提交。如果才提交完没有作任何改,直接运行此命

令的,相当于有机会重新编辑提交明,而所提交的文件快照和之前的一

 

取消已经暂存的文件

可以使用git reset HEAD

<file>... 的方式取消

 

取消对文件的修改

 

git checkout -- filename

在用条命令前,请务必确定真的不再需要保留才的修改。如果只是想回退版本,同

才的修改以便将来继续

 

任何已提交到Git 的都可以被恢。即便在已经删除的分支中的提交,或者用

--amend 重新改写的提交,都可以被恢

 

远程仓库的使用

 

仓库是指托管

在网上的仓库,可能会有好多个,其中有些你只能,另外有些可以写。同他人

开发某个,需要管理仓库,以便推送或拉取数据,分享各自的工作展。管

仓库的工作,包括添加,移除弃的,管理各式分支,定是否

跟踪些分

 

 

查看当前的远程库

看当前配置有哪些仓库,可以用git remote 命令,它会列出

名字。在克隆完某个目后,至少可以看到一个名origin Git 使用

名字来标识你所克隆的原始仓库

 

也可以加上-v 选项注:此verbose 写,取首字母),对应的克隆地

 

添加远程仓库

要添加一个新的仓库,可以指定一个简单的名字,以便将来引用,运行git remote

add [shortname] [url]

 

从远程仓库抓取数据

 

$ git fetch [remote-name]这里是远程仓库别名

 

此命令会到仓库中拉取所有你本地仓库没有的数据。运行完成后,你就可以在本

访问该远仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支

 

 

如果是克隆了一个仓库,此命令会自仓库归origin 名下。所以,git fetch

origin 会抓取从你上次克隆以来人上到此仓库中的所有更

 

fetch 命令只是将端的数据拉到本地

,并不自合并到当前工作分支,只有当你确好了,才能手工合并

 

如果置了某个分支用于跟踪某个仓库的分支(参及第三章的内容),可以使

git pull 命令自抓取数据下来,然后将端分支自合并到本地仓库中当前分

 

情况下git clone 命令本上就是

动创建了本地的master 分支用于跟踪仓库中的master 分支

 

所以一般我运行git pull,目的都是要从原始克隆的仓库中抓取数

据后,合并到工作目中当前分

 

 

推送数据到远程仓库

行到一个段,要同人分享目前的成果,可以将本地仓库中的数据推送到

仓库实现这个任的命令很简单git push [remote-name] [branch-name]。如果要把

本地的master 分支推送到origin 器上(再次明下,克隆操作会自使用默

master origin 名字),可以运行下面的命令:

$ git push origin master

 

只有在所克隆的服器上有写限,或者同一刻没有其他人在推数据,条命令才会如

期完成任。如果在你推数据前,已有其他人推送了若干更新,那你的推送操作就会被

回。你必先把他的更新抓取到本地,并到自己的目中,然后才可以再次推送

 

查看远程仓库信息

命令git remote show [remote-name] 看某个仓库详细

 

 

远程仓库的删除和重命名

在新版Git 中可以用git remote rename 命令修改某个仓库短名

 

对远仓库的重命名,也会使对应的分支名称

 

碰到仓库器迁移,或者原来的克隆像不再使用,又或者某个参与者不再献代

,那需要移除对应仓库,可以运行git remote rm 命令

 

 

打标签

列显已有的标签

列出标签的命令非常简单,直接运行git tag 即可

示的标签按字母序排列,所以标签的先后并不表示重要程度的重。

 

如果你只1.4.2 系列的版本感趣,可以运行下面的命令

$ git tag -l 'v1.4.2.*'

v1.4.2.1

v1.4.2.2

v1.4.2.3

v1.4.2.4

 

 

新建标签

Git 使用的标签有两种类型:的(lightweight)和含附注的(annotated)。

级标签就像是个不化的分支,实际上它就是个指向特定提交象的引用。而含附注

实际上是存仓库中的一个独立象,它有自身的校和信息,包含着标签的名字,

件地址和日期,以及标签说明,标签本身也允使用GNU Privacy Guard (GPG)

署或验证。一般我都建使用含附注型的标签,以便保留相信息;当然,如果只是

性加注标签,或者不需要旁注外信息,用级标签也没问题

 

含附注的标签

建一个含附注型的标签非常简单,用-a 注:取annotated 的首字母)指定

名字即

$ git tag -a v1.4 -m 'my version 1.4'

-m 选项则指定了对应标签说明,Git 会将此明一同保存在标签对

签署标签

如果你有自己的私可以用GPG 标签,只需要把之前的-a -s 注:

Signed 的首字母)即可

 

轻量级标签

级标签实际上就是一个保存着对应提交象的校和信息的文件。要这样

,一个-a-s -m 选项都不用,直接标签名字即可:

$ git tag v1.4-lw

 

验证标签

可以使用git tag -v [tag-name] 注:取verify 的首字母)的方式验证经签署的

标签。此命令会GPG 验证签名,所以你需要有署者的公,存放在keyring 中,

才能验证

 

 

 

 

 

 

分享到:
评论

相关推荐

    Git基础知识相关资料汇总

    资源名称:Git基础知识相关资料汇总资源目录:【】15分钟学会Git【】Git-branching-model【】git工作原理理解【】git简易指南【】ProGit资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    git基础.md 基础学习资料

    ## Git基础原理与使用 ### Git底层命令 #### `git ls-files -s` - **用途**:列出暂存区中的文件列表。 - **应用场景**:当你想要了解哪些文件已经被添加到暂存区中,但还未进行提交时,该命令非常有用。 #### `...

    git基础(git服务器搭建+git教程+git廖雪峰)

    ### Git基础概念 1. **仓库(Repository)**:存储项目所有版本信息的地方,每个Git仓库都有一个HEAD指针指向当前分支。 2. **工作目录(Working Directory)**:用户实际编辑代码的地方,包含了项目的原始文件和....

    《git基础知识》PPT课件.ppt

    Git 基础知识 Git 是一个分布式版本控制系统,它不同于集中式版本控制系统 SVN。Git 的优势在于上传下载速度快、异地协同工作、现场版本控制、更好的提交列表、更好的差异比较、工作进度保存、作为 SVN 前端实现...

    crossin-Git基础系列

    "crossin-Git基础系列-12"可能是指一个关于Git基础教程的第十二部分,由Crossin主讲。在这个系列中,我们可能会深入学习Git的核心概念和常用命令。 1. Git安装与配置: 在开始使用Git之前,你需要在计算机上安装...

    Git基础.rar

    这份"Git基础.rar"压缩包包含了一个名为"Git基础.xmind"的文件,很可能是用Xmind创建的Git基础知识的思维导图。通过这个导图,我们可以学习和回顾Git的基础概念、命令以及工作流程。 首先,Git的核心概念包括仓库...

    git基础知识整理.pdf

    Git的常用命令包括`git init`用于初始化新的Git仓库,`git clone`用于复制远程仓库,`git add`用于将更改添加到暂存区,`git commit`用于提交更改到本地仓库,`git push`用于将本地更改推送到远程仓库,`git pull`...

    Git基础教程.docx

    Git 基础教程 Git 是一个分布式版本控制系统, Allow 多个开发者在同一个项目上进行协作。下面是 Git 基础教程的知识点总结: 一、Git 下载安装 Git 下载安装可以通过网上搜索找到下载安装包,例如 Windows ...

    Git 基础培训1

    Git是分布式版本控制系统,...以上只是Git基础命令的概述,实际使用中,还需要结合实际场景学习更多高级用法,如解决合并冲突、使用工作流等。理解并熟练运用这些命令,你就能更好地利用Git进行项目管理和协同开发。

    新人git 基础教程 大全

    Git基础教程大全 版本控制是软件开发过程中的一种管理技术,用于追踪和记录文件、目录或项目的修改历史,方便查看更改历史记录,备份以便恢复以前的版本。版本控制的主要目的是为了在多人协同开发项目时,能够追踪...

    Git基础知识及常用场景,适合开发人员和初学者.docx

    ### Git基础知识及常用场景 #### 一、Git简介 **Git**是一种先进的分布式版本控制系统,由Linus Torvalds在2005年为了更好地管理Linux内核开发而创建。Git的设计初衷是为了满足大规模项目的版本控制需求,因此它在...

    Git基础知识及面试题

    Git基础知识及面试题涵盖了Git的原理、操作、代码托管平台以及在IDEA中的应用,这些都是面试和日常工作中频繁涉及的内容。 首先,Git的核心概念是分布式版本控制。与集中式版本控制系统如SVN不同,Git的每个副本都...

    git基础知识总结大全

    1.git的下载和安装 2.创建远程个gitHub仓库 3.git创建本地版本库 4.上传项目到仓库中 5.从gitHub仓库下载项目到本地仓库

    git基础命令行指令

    ### Git基础命令行指令知识点详解 #### Git简介与特点 Git是一种分布式的版本控制系统,用于追踪计算机文件的变化并协调多个用户间的协作。相比于其他版本控制系统(如SVN),Git具有以下显著特点: - **基于文件...

    git基础教程.docx

    了解和掌握这些Git基础操作,对于协同开发和版本控制至关重要。随着熟练度的提高,你还可以学习更高级的Git技巧,例如交互式添加(`git add -p`)、撤销提交(`git reset`)、解决合并冲突等,以提升工作效率。

    Git基础课程.pdf

    本知识点将对给定文件中的Git基础课程内容进行详细介绍。 首先,课程中提到了版本控制系统的基本概念,包括集中式版本控制系统和分布式版本控制系统。集中式版本控制系统,如CVS、SVN、VSS等,依赖于中央服务器进行...

    git.md git基础知识以及详细使用方法

    Git是一个版本管理控制系统(缩写VCS) * 可以在任何时间点,将文档的状态作为更新记录保存起来 * 也可以在任何时间点,将更新记录恢复回来。

    git详细教程,包括Git 基础知识、安装与配置、基本操作、高级用法

    Git 基础知识: 版本控制: 管理代码的历史记录,跟踪更改。 分布式架构: 每个开发者拥有完整的代码库和历史记录。 快照管理: Git 通过保存每次提交的快照,而非简单的差异,来管理代码。 安装与配置: 安装 Git: 在...

    git基础,包含学习Git的基础内容

    git基础知识的学习,为后面的代码库的积累打基础

Global site tag (gtag.js) - Google Analytics