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 中,

才能验证

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值