git使用指南

git使用指南
git使用指南

Git使用指南

Li Yanrui

v0.1,20080728 liyanrui.m2@https://www.360docs.net/doc/516277902.html,

前言

Git是什么

非常简单地说,Git是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。所谓版本控制系统(Version Control System),从狭义上来说,它是软件项目开发过程中用于储存我们所写的代码所有修订版本的软件,但事实上我们可以将任何对项目有帮助的文档交付版本控制系统进行管理。

2005年,Torvalds开始着手开发Git是为了作为一种过渡方案来替代BitKeeper,后者之前一直是Linux内核开发人员在使用的版本控制工具,当时由于自由软件社区中的许多人觉得BitKeeper的使用许可证并不适合自由软件社区的工作,因此Linus决定着手开发许可证更为自由灵活的版本控制系统。尽管最初Git的开发是为了辅助Linux内核开发的过程,但是现在很多其他自由软件项目中也使用了Git实现代码版本管理,譬如,https://www.360docs.net/doc/516277902.html,项目、许多https://www.360docs.net/doc/516277902.html,的项目、Ruby项目等。

为什么使用版本控制系统

版本控制系统是为懒人准备的,它让懒人们比那些善于备份文档的勤劳人拥有更干净的文件系统以及更多的可以活着的时间。

本文档主要内容

在第1章中讲述如何使用Git管理自己的个人文档,主要是初步熟悉Git的诸多概念及其日常基本命令的使用。第2章中主要讲述如何基于Git实现多人协作的项目开发模式,以此扭转当前实验室成员在项目研发中各自为政或不能有效沟通的现状。第3章讲述如何利用Git强大的项目分支管理功能实现良好风格的项目协同开发模式。第4章为Git使用之FAQ,用于记载在本实验室推广使用Git过程中诸位同学所遇到的一些细节问题。

Contents

第1章使用Git管理个人文档1

1.1何种文档需要保存1

1.2建立项目仓库1

1.3关于建立Git仓库的一些细节3

1.4仓库与工作树4

1.5在项目中工作4

1.6查看版本历史5

1.7撤销与恢复7

1.8如何使用Git帮助文档8

1.9总结8

第2章基于Git的团队协同开发9

2.1两个人如何协同9

2.2如何解决仓库合并冲突10

2.3三人以至更多人如何协同12

2.4M2GE的协同开发13

2.5总结14

第3章项目分支管理15

3.1如何产生项目分支15

3.2分支的合并16

3.3M2GE新的协同开发模式16

3.4总结17

第1章使用Git管理个人文档

本章讲述如何使用Git管理我们的个人文档,用以展示Git的一些基本功能,并且秉承学以致用、用以促学的精神,引导大家积极地将Git应用于日常学习与工作中的文档备份。仿温水煮蛙之古例,此章乃温水也。

1.1何种文档需要保存

凡需要持续变动的文档皆可作为项目并交付于Git进行管理。由于Git可以详细地记录对于项目的各种修改并提供了功能强大的版本控制,因此愈是修改较为频繁的文档,愈是有必要将其纳入Git的管理之下。

理论上,Git可以保存任何文档,但是最善于保存文本文档,因为它本来就是为解决软件源代码(也是一种文本文档)版本管理问题而开发的,提供了许多有助于文本分析的工具。对于非文本文档,Git只是简单地为其进行备份并实施版本管理。1.2建立项目仓库

欲使用Git对现有文档进行版本控制,首先要基于现有文档建立项目仓库。下面以本文档的版本管理为例,演示如何将其作为项目并纳于Git的版本控制之下。

本文档是由T E X生成的,对应T E X源文档皆位于$HOME/work/m2doc目录下,下文为叙述方便,以Bash变量$WORK代替该目录。首先需初始化Git仓库:

$cd$WORK

$git init

Git会作出以下回应:

Initialized empty Git repository in$PROJECT/.git/

上述操作的结果是在$WORK目录下创建了一个.git隐藏目录,它就是所谓的Git仓库,不过现在它还是空的。另外$WORK目录也不再是普通的文档目录了,今后我们将其称为工作树。

下面应当有选择地将工作树中的一些文档存储至Git仓库中。由于Git在向仓库中添加文档时并非是简单地文档复制过去,势必要将所添加文档进行一番处理,生成Git仓库所能接受的数据格式,Git称这个过程为"take a snapshot"(生成快照)。若将工作树下所有文档(包含子目录)生成快照,可采用以下命令:$cd$WORK

$git add.

所生成的快照被存放到一个临时的存储区域,Git称该区域为索引。使用git-commit命令可将索引提交至仓库中,这个过程称为提交,每一次提交都意味着版本在进行一次更新。git-commit最简单的用法如下:

$git commit

执行上述git-commit命令时,Git会自动调用系统默认的文本编辑器,要求你输入版本更新说明并保存。请记住,输入简约的版本更新说明是非常有必要的,它就像剧本一样,可以帮助你快速回忆起对项目的重大改动。

对于简短的版本更新信息,可以使用git-commit的“-m”选项,如下:

$git commit-m"你的版本更新信息"

上述过程即为建立Git仓库的一般过程,我将其总结为图1.1

所示之流程:

1.3关于建立Git仓库的一些细节

看过上一节内容,也许你会跃跃欲试,准备拿自己的一个文档目录下手。切莫如此着急,为了概念的完整性,上一节内容中,我故意省略了两个细节问题,下面逐一道来。

第一个问题是:在使用Git之前,你需要面对Git来一番自我介绍。Git不喜欢不愿透漏姓名的人,因为它要求每个人在向仓库提交数据时,都应当承担一定的责任。要向Git进行自我介绍,请使用以下命令:

$git config--global https://www.360docs.net/doc/516277902.html,"Your Name Comes Here"

$git config--global user.email you@https://www.360docs.net/doc/516277902.html,

第二个问题是:在生成文档内容快照时,工作树中有一些文档是你不希望接受Git管理的,譬如程序编译时生成的中间文件,对于这样的文件如何避免为之生成快照?

譬如对于上一节的用例,在工作树中存在以下文件(或子目录):

doc-env.tex git-tutor.tex Makefile zh

git-tutor main.tex vfonts.tex

其中的zh目录存放着T E X文档编译时生成的中间文件,因此该目录不应该被Git所管理。为解决此类问题,Git提供了文档忽略机制,可以将工作树中你不希望接受Git管理的文档信息写到同一目录下的.gitignore文件中。对于本例中的zh目录,采用如下操作可将其排除仓库之外,然后再对$WORK生成快照即可。

$cd$WORK

$echo"zh">.gitignore

$git add.

有关gitignore文件的诸多细节知识可阅读其使用手册:

$man gitignore

1.4仓库与工作树

按照前文的说法,Git仓库就是那个.git目录,其中存放的是我们所提交的文档索引内容,Git可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制。工作树是包含.git的目录,在前文示例中即$WORK目录。

为了更加明确仓库与工作树的概念,下面做一个实验:

$cp-R$WORK/.git/tmp/m2doc.git

$cd/tmp

$git clone m2doc.git m2doc-copy

首先,我们将$WORK目录中的.git目录复制到/tmp目录下并进行重命名为m2doc.git,然后使用git-clone命令1从m2doc.git中生成m2doc-copy目录。若进入m2doc-copy目录观察一下,就会发现该目录所包含的内容是等同于$WORK目录的。

上述实验意味着,只要我们拥有仓库,即m2doc.git,那么就可以很容易地生成工作树,而这个工作树又包含着一个仓库,即m2doc-copy/.git。所以,我们可以这样理解:在Git中,仓库与工作树之间无需分的很清楚。

1.5在项目中工作

在工作树中,我们日常所进行的工作无非是对Git仓库所管理的文档进行修改,或者添加/删除一些文件。这些操作与采用Git管理我们的文档之前没有任何差异,只是在你认为一个工作阶段完成之时,要记得通知Git,命令它记下你所进行更新,这一步骤是通过生成文档快照并将其加入到索引中来实现的。

譬如今天,我向$WORK目录添加了一份新文档ch1.tex,我需要通知Git记住我的这一更新:

$cd$WORK

$git add ch1.tex

1

工作树克隆命令,在后文中将会对其详细讲述。

这样,Git就会将有关ch1.tex的更新添加到索引中。然后我又对其它文档进行了一些修改,譬如修改了doc-env.tex以及git-tutor.tex文件,继续使用git-add命令将它们的更新添加到索引中:

$git add doc-env.tex git-tutor.tex

晚上,这一天的工作告以段落,我觉得有必要将今天所做的提交到仓库中,于是执行git-commit操作,将索引内容添加到仓库中。

可能一天下来,你对工作树中的许多文档都进行了更新(文档添加、修改、删除),但是我忘记了它们的名字,此时若将所做的全部更新添加到索引中,比较轻省的做法就是:

$cd$WORK

$git add.

$git commit-a

...输入日志信息...

git-add命令通常能够判断出当前目录(包括其子目录)下用户所添加的新文档,并将其信息追加到索引中。git-commit命令的-a选项可将所有被修改的文档或者已删除的文档的当前状态提交倒仓库中。记住,如果只是修改或者删除了已被Git管理的文档,是没必要使用git-add命令的。

本节并未讲述新的Git命令,完全是前面所讲过的一些命令的重复介绍,只是它们出现的场景有所区别而已。另外,要注意的问题是,Git不会主动记录你对文档进行的更新,除非你对它发号施令。

1.6查看版本历史

在工作树中,使用git-log命令可以查看当前项目的日志,也就是你在使用git-commit向仓库提交新版本时所属如的版本更新信息。

$git log

如果你想看一下每一次版本的大致变动情况,可使用以下命令:

$git log--stat--summary

下面分析一下git-log命令的回应信息。譬如当我在“Git使用指南”这一文档项目的工作树中查阅项目日志,git-log命令给出了以下回应信息:commit dfb02e6e4f2f7b573337763e5c0013802e392818

Author:Li Yanrui

Date:Wed Jul916:32:252008+0800

Git使用指南文档项目初始化

commit9a4a9ce37561bbb42d8187d7a851e228e26e1212

Author:Li Yanrui

Date:Wed Jul916:31:072008+0800

添加.gitignore文件

commit459640624390eb733fb2ad45bcb8731435931e60

Author:Li Yanrui

Date:Wed Jul916:28:502008+0800

M2Doc项目初始化

lines1-17/17(END)

从上面的项目日志信息中可以看到我对M2Doc项目所做的一些阶段性工作,每一个版本都对应着一次项目版本更新提交。在项目日志信息中,每条日志的首行(就是那一串莫名奇妙的数字)为版本更新提交所进行的命名,我们可以将该命名理解为项目版本号。项目版本号应该是唯一的,默认由Git自动生成,用以标示项目的某一次更新。如果我们将项目版本号用作git-show命令的参数,即可查看该次项目版本的更新细节:

$git show dfb02e6e4f2f7b573337763e5c0013802e392818

除了使用完整的版本号查看项目版本更新细节之外,也还可以使用以下方式:

$git show dfb02#一般只使用版本号的前几个字符即可

$git show HEAD#显示当前分支的最新版本的更新细节

每一个项目版本号通常都对应存在一个父版本号,也就是项目的前一次版本状态。可使用如下命令查看当前项目版本的父版本更新细节:

$git show HEAD^#查看HEAD的父版本更新细节

$git show HEAD^^#查看HEAD的祖父版本更新细节

$git show HEAD~4#查看HEAD的祖父之祖父的版本更新细节

你可以对项目版本号进行自定义,然后就可以使用自定义的版本号查看对应的项目版本更新细节:

$git tag v0.1dfb02

$git show

实际上,上述命令并非是真正的进行版本号自定义,只是制造了一个tag对象而已,这在进行项目版本对外发布时比较有用。本文档后续章节会对tag的一些细节进行介绍。

1.7撤销与恢复

版本控制系统的一个重要任务就是提供撤销和恢复某一阶段工作的功能。git-reset命令就是为这样的任务而准备的,它可以将项目当前版本定位到之前提交的任何版本中。

git-reset命令有三个选项:--mixed、--soft和--hard。我们在日常使用中仅使用前两个选项;第三个选项由于杀伤力太大,容易损坏项目仓库,需谨慎使用。

--mixed是git-reset的默认选项,它的作用是重置索引内容,将其定位到指定的项目版本,而不改变你的工作树中的所有内容,只是提示你有哪些文件还未更新。

--soft选项既不触动索引的位置,也不改变工作树中的任何内容,但是会要求它们处于一个良好的次序之内。该选项会保留你在工作树中的所有更新并使之处于待提交状态。

关于git-reset命令的具体如何使用可留作本章的练习题,你可以随便创建一个Git仓库并向其提交一些版本更新,然后测试--mixed与--soft选项的效果。如果欲查看git-reset命令对工作树的影响,可使用git-status命令。另外,这道练习

题应当结合git-reset的使用帮助(参考下一节)来做,当你大致明白了git-reset的用法,这道题就算做对了。

1.8如何使用Git帮助文档

前文中,我一直没有解释这样一个现象,那就是在正文中,总是使用类似git-reset这样的命令形式,但是在终端中实际输入这些指令时,所采用的命令形式又变为git reset。我猜测这样做的原因是后者作为命令形式对于用户更为友好一些,因为我们已经习惯了在终端中输入这样的命令格式。但是在查阅命令的说明文档时,需要使用第一种命令格式,譬如要查看git reset命令的用法,可:

$man git-reset

1.9总结

现在我们总算是掌握了有关Git的一些粗浅但非常实用的知识,已具备了使用Git管理个人文档的能力,希望大家能够学以致用,积极地使用Git来管理你认为需要进行版本控制的个人文档。

第2章基于Git的团队协同开发

很多时候我们是多个人同时为做一件事情而努力,如何有效化解多人协同运作过程中出现的种种矛盾是相当重要的。实践证明,Git可以很好的胜任此类任务,这也是我们要在实验室内部推广Git应用的主要原因。

2.1两个人如何协同

Lyr与Tzc是本节的两位主角。现在假设Lyr开始着手开发M2GE库,并按照第1章所讲述的Git基本用法将M2GE库纳于Git的管理之下。但是,很快Lyr就发现了仅凭个人之力很难在项目规定期限内完成这项工作,因此他邀请Tzc来参与M2GE库,故事就这样开始了。

Lyr的M2GE工作树为/work/m2ge,Tzc可通过以下命令获得与Lyr同样的工作树:

$cd work

$git clone lyr@192.168.0.7:~/work/m2ge m2ge

git-clone可利用各种网络协议访问远端机器中的Git仓库,从中导出完整的工作树到本地。在上述示例中,Tzc通过SSH协议访问了Lyr机器上的lyr账户的M2GE仓库并进行导出,从而在当前目录下建立了m2ge工作树。若上述命令中未指定本地工作树名,那么git-clone会在Tzc当前所在目录中建立与Lyr的M2GE工作树同名的工作树,所以上述命令指定Tzc的工作树名为m2ge显得有些多余。

注意,git-clone命令只要碰到类似以下格式的远端仓库地址,它就会认为该地址是符合SSH协议的。

账户@IP:工作树路径

Tzc既已获得M2GE工作树,他就可以开始工作了,同时,Lyr也在位于自己的机器上的M2GE工作树中工作。在此期间,二人对位于各自机器上的M2GE仓库的操作只需具备第1章所讲述的内容足矣。

一个阶段之后,二人均将所做的工作不断地提交到各自的Git仓库中,直至他们觉得有必要将各自所做的工作合并起来之后再进行新的开发阶段。由于Lyr作为主要开发者,二人的工作在他的机器上进行合并是比较自然的。当然在Tzc机器上合并也未尝不可,因为Git是不分主次仓库的,同一项目的不同仓库都是地位均等。

为实现与Tzc的工作合并,Lyr执行了以下操作:

$cd~/work/m2ge

$git pull tzc@192.168.0.5:~/work/m2ge

git-pull命令可将属于同一项目的远端仓库与同样属于同一项目的本地仓库进行合并,它包含了两个操作:从远端仓库中取出更新版本,然后合并到本地仓库。上述命令可在Lyr的m2ge仓库中完成对Tzc机器上的myge仓库的合并。

如果Lyr与Tzc是对了不同的文件进行了改动,那么可以不费周折地完成仓库合并。但是倘若二人对一些相同的文件进行了改动,那么在合并时必然会遭遇合并冲突的问题,此时手动修改发生合并冲突的文件,然后将结果提交到本地仓库。由于处理合并冲突的问题比较复杂一些,所以下面单独拿出一个小节来讲述。

当项目合并结束后,意味着Lyr与Tzc一个协同开发周期的结束,他们彼此很欣赏对方的工作,所以又开始了下一个周期……

2.2如何解决仓库合并冲突

现在假设Lyr与Tzc在各自的工作树中对同一份文件foo.txt进行了修改,而foo.txt原内容如下:

one

two

three

Lyr对foo.txt进行了如下改动,并将该改动提交到本地仓库。

ONE

two

three

Tzc对foo.txt进行了以下改动,也将该改动提交到本地仓库。

one

two

THREE

当Lyr在合并Tzc的Git仓库时,Git会自动合并二人对foo.txt的修改:

ONE

two

THREE

现在Lyr工作树中的foo.txt文件即包含了Lyr的改动,也包含了Tzc的改动,而且合并结果自动作为新版本提交到Lyr的仓库中。

观察上述合并冲突示例,可以看出,虽然Lyr与Tzc是对同一份文件进行了修改,但是他们的修改并未重叠。现在假设二人对foo.txt的同一行做出了修改,那么在仓库合并时会发生什么,应当如何处理呢?

现在假定上述示例中,Tzc对foo.txt的修改如下:

one ONE

two

three

这样,二人对foo.txt的同一行进行了不同的修改,当合并时,Git会给出以下反馈信息:

Auto-merged foo.txt

CONFLICT(content):Merge conflict in foo

Automatic merge failed;fix conflicts and then commit the

result.

上述信息之意是:尝试合并foo.txt文件的改动发生了冲突,自动合并失败,请用户手动修复冲突然后将结果提交到仓库中。Lyr看到上述信息,就打开了合并后的foo.txt,他看到了以下内容:

<<<<<<

ONE

=======

one ONE

>>>>>>>1116d3270764d91a25532a753a47b8b0e1b6f1b8:foo

two

three

以一串<开头的字串表示Lyr的当前项目版本对foo.txt的修改结果,而以一串>开头的字串表示Tzc的当前项目版本对foo.txt的修改结果。中间用了一串=号将二人修改结果隔开。一旦理解了版本冲突的表示格式,Lyr就很容易地根据现实情况将合并冲突问题解决掉,他认为Tzc的改动是不符合项目需求的,并且按照项目的实际需求进行了手工合并。最后,Lyr将合并处理结果提交到仓库中,即完成了重叠冲突的合并问题的解决。

2.3三人以至更多人如何协同

前文在讲述二人协同模式时,强调了Lyr与Tzc的主次关系,这种关系似乎对于三人以至更多人的协同也有效。现在我们再引入两位故事主角Lxc与Zhu来说明此问题。假设Lxc与Zhu仿照Tzc那样从Lyr那里git-clone了一份项目仓库,进行了一番卓有成效的版本更新。最后,Lyr需要一一取回其他三人的仓库,然后再一一合并方能完成一个协同周期,这些工作逐渐让Lyr汗流浃背,疲于应付。因此Lyr希望其他三人能够分担一下项目版本合并问题的处理工作。

Git提供了git-pull的对偶命令,即git-push。顾名思义,git-pull命令负责从远端仓库取回版本更新,而git-push可将本地版本更新推送到远端仓库中。

利用git-pull与git-push命令,那么在一个协同周期之内,除了Lyr之外,其余三人的项目开发流程大致如下:

$git clone lyr@192.168.0.7:~/work/m2ge

...项目开发...

$git add改动的文件

$git commit

$git pull

...解决版本合并问题...

$git push

在一个协同周期内,Lyr对M2GE仓库的管理工作相当于管理一份他个人项目一般,因为M2GE库是位于他的机器上,他是不需要git-pull与git-push的。

这样,一个基于Git较为简单的三人以至更多人的协同工作模式被实现了,这是我们在尚未熟悉Git应用之时比较稳妥的协同方案。下一节将基于这一方案讲述M2GE库仓库的建立以及多人协同开发过程的具体实现。

2.4M2GE的协同开发

上一节所给出的三人及三人以上的协同工作模式有些不合理,譬如Lyr过于特殊,别人都要git-pull与git-push,唯独他不需要。现在要剥夺他的这一特权,最有效的办法就是将M2GE仓库建立在实验室的服务器上。

首先,Lyr通过SSH登录到服务器,寻找合适位置,建立m2ge.git目录,譬如/project/m2ge.git,然后初始化一个空仓库,以此作为M2GE仓库:$mkdir-p~/project/m2ge.git

$cd~/project/m2ge.git

$git--bare init--shared

上述操作中,git-init命令的--bare选项可以让m2ge.git目录等价于一个仓库。也就是说,m2ge.git本来是一个工作树,但是--bare选项将本应当存放在m2ge.git/.git中的仓库内容全部放置在m2ge.git目录下,就好像仓库完全的裸露在工作树中,所以称之为赤裸的仓库。

然后,Lyr将自己机器上已经接受Git管理的m2ge仓库推送到服务器端的m2ge.git仓库:

$cd~/work/m2ge

$git push m2@192.168.0.2:~/project/m2ge.git master

上述git-push命令中出现的master参数的含义将在下一章讲述,此处可略过不谈。现在,大家已经得到了M2GE仓库的最初版本,并且可以使用git-clone命令在本地创建工作目录:

$git clone m2@192.168.0.2:~/project/m2ge.git

之后,我们就可以开始一个又一个协同周期,服务器上的m2ge.git仓库将会逐次记录着每位协同开发者的版本更新提交,此基本过程可参考上一节所述内容来理解。

2.5总结

本章讲述了基于Git最基本的多人协同工作模式,并引入了三个新的Git命令:git-clone、git-pull与git-push。基于这三个命令并配合上一章所讲述Git基本操作,足以实现M2GE初级阶段的协同开发。

第3章项目分支管理

Git最为世人称道的就是它那强大的项目分支管理功能,现在较为流行的版本控制系统,诸如CVS、SVN等,虽然也提供了项目分支管理功能,但是可用性极低。对于Git而言,管理多个项目分支如探囊取物耳。本章主要讲述Git的项目分支管理的基本知识以及如何利用这一功能形成更有章法的项目协同开发模式。

3.1如何产生项目分支

前两章所讲内容未有提及项目分支问题,但事实上是有一个分支存在的,那就是master分支(主分支),该分支是由Git自动产生的。在此之前,我们针对项目版本的各种操作都是在主分支上进行的,只是我们未察觉它的存在而已。

Git可以轻松地产生新的项目分支,譬如下面操作可添加一个名曰“local”的新的项目分支:

$git branch local

对于新产生的local分支,初始时是完全等同于主分支的。但是,在local分支所进行的所有版本更新工作都不影响主分支,这意味着作为项目的参与者,可以在local中开始各种各样的更新尝试。

查看项目仓库中存在多少分支,可直接使用git-branch命令,譬如使用该命令查看我的M2Doc项目分支列表:

$git branch

local

*master

在上述操作输出结果中,若分支名之前存在*符号,表示此分支为当前分支。其实Git各分支不存在尊卑之别,只存在哪个分支是当前分支的区别。为了某种良好的秩序,很多人默认是将master分支视为主分支,本文也将沿用这一潜在规则。

由上述操作输出的分支列表可以看出,虽然使用git-branch命令产生了local分支,但是Git不会自动将当前分支切换到local下。可使用git-checkout命令实现分支切换,下面操作将当前分支切换为前文所产生的local分支:

$git checkout local

3.2分支的合并

我们产生了local分支,并在该分支下进行了诸多修改与数次的版本更新提交,但是该如何将这一分支的最终状态提交到master分支中呢?

git-merge命令可实现两个分支的合并。譬如我们将local分支与master分支合并,操作如下:

$git checkout master#将当前分支切换为master

$git merge local#将local分支与当前分支合并

当一个分支检查无误并且与master分支成功合并完毕后,那么这一分支基本上就没有存在的必要性了,可以删除掉:

$git branch-d local

注意,git-branch的-d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想不问青红皂白地删除一个分支,可以使用git-branch的-D选项。

3.3M2GE新的协同开发模式

现在来讨论一下如何基于Git项目分支管理功能实现更为稳健、高效的M2GE库的协同开发机制。

实验室服务器上已经建立了M2GE仓库1。现在以Lyr作为主角,看一看他围绕M2GE开发工作的一天中的工作过程。

首先,Lyr需要更新自己机器上的工作树,并查看实验室其他成员的版本更新信息:

$git pull

$git log

1

如有不解,请阅读第2章。

然后,Lyr开始建立一个新的项目分支,将其命名为lyr,并将当前分支切换为该分支:

$git branch lyr

$git checkout lyr

然后这一天中剩余的大部分时间,Lyr都在自己所建立的项目分支上工作,譬如增加了3个新的接口及相关测试程序,并对原有接口做了一些修改。一天的工作完成后,他有必要将这一天的工作与M2GE仓库的master分支进行合并,然后删除lyr分支:

$git checkout

$git merge lyr

$git branch-d lyr

现在,Lyr已经将这一天的工作反映到自己机器上的M2GE master分支上了,他最后要做的是将其推送到服务器的M2GE仓库,以使项目其他成员能够分享他的工作。这里要注意,在推送版本更新之前,需要使用git-pull命令将这一天中其他成员对服务器端的M2GE的更新拉过来合并到自己的master分支,然后才可以将自己的版本更新推送到服务器上的M2GE仓库,具体操作如下:

1.使用git-pull命令更新本地工作树;

2.若出现版本合并冲突,并且Git无法自动合并,需要手工合并,然后将合并结

果提交到本地master分支;

3.使用git-push命令将本地master分支更新推送到服务器M2GE仓库中。

目前,对于我们而言,在基于Git的M2GE协同开发过程中,引入分支管理功能,可有效防止因个人操作不当而导致向服务器M2GE仓库提交太多的脏数据。另外,也有效保持了本地项目主分支的干净,避免了频繁git-clone服务器端的M2GE仓库来恢复本地的项目主分支。

3.4总结

本章讲述了Git项目分支管理的基本知识,并利用这些知识巩固了M2GE库的协同开发机制。至此为止,诸位同学已经接触了Git的主要功能,并且已经具备了

Eclipse中git的基本使用

一、安装E G I T插件 二、使用EGIT前的配置 三、新建GIT仓库 四、配置.gitignore文件 五、查看历史记录 六、推送远程仓库 七、远程GIT仓库 八、解决推送冲突 九、重置功能 一、安装EGIT插件 现在的eclipse一般都自带了,如果没有,使用EclipseMarketplace,搜索EGit 二、使用EGIT前的配置 配置个人信息,最重要的是https://www.360docs.net/doc/516277902.html,和user.email Preferences>Team>Git>Configuration addEntry 三、新建GIT仓库 新建hh_monitor项目 File>Team>ShareProject选择GIT 创建仓库后,在$ProjectWorks\hh_monitor目录下的.git文件夹,就是git的仓库地址。 和CVS、SVN不同,GIT不会在每一个目录下建立版本控制文件夹,仅在根目录下建立仓库。 同时,eclipse中的project也建立git版本控制,此时未创建分支,处于NO-HEAD状态

文件夹中的符号””表示此文件夹处于untracked状态,这样就成功创建GIT 仓库。 四、配置.gitignore文件 配置.gitignore,排除不需要提交的文件。 此时我们尝试做一次提交,Team->Commit 如上图所示,Author和Committer会默认为Git配置的用户信息。 下面的Files窗口中可以看到此次提交的文件,其中有非常多带有work的文件,此时,在我们的project中链接的work也被GIT默认到版本控制中了。 work下面的文件不需要进行版本控制的,我们可以通过配置.gitignore来排除这这个文件夹。 打开Navigator窗口,在project根目录中添加.gitignore文件,将需要排除控制的目录写入.gitignore文件中。 再次尝试commit,需要提交的文件已经被过滤。 首次提交后,会自动生成master分支 然后在com.hh中新建一个文件,可以看到图标依然是问号,处于untracked状态,即git没有对此文件进行监控。 通过Team->Addtoindex可以将文件加入git索引,进行版本监控 PS:可以看到图标显示也有了变化(EGIT中只要Commit就可以默认将untracked的文件添加到索引再提交更新,不需要分开操作) 也可以通过Team->Untrack将文件从索引控制中排除。 将此次新增的文件commit到仓库中,文件将处于unmodified状态,或者说,这就是一种staged状态 然后修改文件的内容,文件将处于modified状态 五、查看历史记录 Team->Showinhistory可以查看版本历史提交记录 可以选择对比模式 六、推送远程仓库

Git使用教程

Git使用教程 原文出处:涂根华的博客 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。 Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是 一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。 三:在windows上如何安装Git? msysgit是 windows版的Git,如下: 需要从网上下载一个,然后进行默认安装即可。安装完成后,在开始菜单里面找 到“Git –> Git Bash”,如下: 会弹出一个类似的命令窗口的东西,就说明Git安装成功。如下:

安装完成后,还需要最后一步设置,在命令行输入如下: 因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。 注意:git config –global 参数,有了这个参数,表示你这台机器上所有的Git 仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。四:如何操作? 一:创建版本库。

Git 常用命令速查

一、Git 常用命令速查 git push origin :分支名删除远程库分支 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git commit -am "init" 提交并且加注释 git remote add origin git@192.168.1.119:ndshow git push origin master 将文件给推到服务器上 git remote show origin 显示远程库origin里的资源 git push origin master:develop git push origin master:hb-dev 将本地库与服务器上的库进行关联 git checkout --track origin/dev 切换到远程dev分支 git branch -D master develop 删除本地库develop git checkout -b dev 建立一个新的本地分支dev git merge origin/dev 将分支dev与当前分支进行合并 git checkout dev 切换到本地dev分支 git remote show 查看远程库 git add . 目录下所有的文件 git rm 文件名(包括路径) 从git中删除指定文件 git clone git://https://www.360docs.net/doc/516277902.html,/schacon/grit.git 从服务器上将代码给拉下来 git config --list 看所有用户 git ls-files 看已经被提交的 git rm [file name] 删除一个文件 git commit -a 提交当前repos的所有的改变 git add [file name] 添加一个文件到git index git commit -v 当你用-v参数的时候可以看commit的差异 git commit -m "This is the message describing the commit" 添加commit信息git commit -a -a是代表add,把所有的change加到git index里然后再commit git commit -a -v 一般提交命令 git log 看你commit的日志 git diff 查看尚未暂存的更新 git rm a.a 移除文件(从暂存区和工作区中删除) git rm --cached a.a 移除文件(只从暂存区中删除) git commit -m "remove" 移除文件(从Git中删除) git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除) git diff --cached 或$ git diff --staged 查看尚未提交的更新 git stash push 将文件给push到一个临时空间中 git stash pop 将文件从临时空间pop下来 --------------------------------------------------------- git remote add origin git@https://www.360docs.net/doc/516277902.html,:username/Hello-World.git

git、gerrit的使用方法和规范方案

git、gerrit的使用方法和规范 1、新员工git安装环境准备 首先从服务器端 ftp://192.168.31.10/Software/Tool/Git/ (用户名/密码 paypalm/paypalms)获取软件Git-1.9.4-preview20140929 1、默认安装 Git-1.9.4-preview20140929 安装完成后打开git bash编辑器 生成密钥对:ssh-keygen -t rsa 按三次回车键,默认生成路径如下图

将生成的公钥内容在gerrit中进行添加(参考下文gerrit注册使用)每个人不同环境可以添加多个对应的公钥cat ~/.ssh/id_rsa.pub 2、gerrit注册使用 1、申请账号 通过邮件向PPCM@https://www.360docs.net/doc/516277902.html,发邮件申请,打开gerrit网站 (http://192.168.31.10:8088),登录后在右上角进行setting设置

2、公钥添加 点击SSH Public Keys》Add Key选项进行公钥添加

3、邮箱注册 点击Register New Email 进行邮箱注册,注册后有邮件发送至你的邮箱点开链接重新登录 3、gerrit主要功能介绍 1、常规功能 1、登录gerrit》ALL》open状态,此显示为已推送但还没有入库的所有patch,CR状态栏中绿色对勾代表已评审状态,可以根据计划入库 2、gerrit》ALL》Merged状态表示所有已经进入项目库的patch

3、提交patch后,开发人员可能觉得不太满意会选择放弃,gerrit》ALL》Abandoned 即为已放弃的patch,只有还没有入库的patch才能选择放弃,点击进入patch,橘黄色Abandon即为放弃选项,放弃后的patch依然可以进行还原,如以下操作 橘黄色Restore为还原选项

Git+使用教程

Git 中文教程 介绍 Git --- The stupid content tracker, 傻瓜内容跟踪器。Linus 是这样给我们介绍 Git 的。 Git 是用于 Linux 内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。 实际上内核开发团队决定开始开发和使用 Git 来作为内核开发的版本控制系统的时候,世界开源社群的反对声音不少,最大的理由是 Git 太艰涩难懂,从 Git 的内部工作机制来说,的确是这样。但是随着开发的深入,Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好用,即使是用来管理我们自己的开发项目,Git 都是一个友好,有力的工具。现在,越来越多的著名项目采用 Git 来管理项目开发,例如:wine, U-boot 等,详情看https://www.360docs.net/doc/516277902.html,/git 作为开源自由原教旨主义项目,Git 没有对版本库的浏览和修改做任何的权限限制。它只适用于 Linux / Unix 平台,没有 Windows 版本,目前也没有这样的开发计划。 本文将以 Git 官方文档Tutorial,core-tutorial和Everyday GIT作为蓝本翻译整理,但是暂时去掉了对 Git 内部工作机制的阐述,力求简明扼要,并加入了作者使用 Git 的过程中的一些心得体会,注意事项,以及更多的例子。建议你最好通过你所使用的 Unix / Linux 发行版的安装包来安装 Git, 你可以在线浏览本文,也可以通过下面的命令来得到本文最新的版本库,并且通过后面的学习用 Git 作为工具参加到本文的创作中来。 $ git-clone https://www.360docs.net/doc/516277902.html,/git/gittutorcn.git 创建一个版本库:git-init-db 创建一个 Git 版本库是很容易的,只要用命令git-init-db就可以了。现在我们来为本文的写作创建一个版本库: $ mkdir gittutorcn $ cd gittutorcn $ git-init-db git 将会作出以下的回应 defaulting to local storage area 这样,一个空的版本库就创建好了,并在当前目录中创建一个叫 .git 的子目录。你可以用 ls -a 查看一下,并请注意其中的三项内容: ● 一个叫 HEAD 的文件,我们现在来查看一下它的内容:

TortoiseGit用户手册

TortoiseGit用户手册 1.创建本地仓库 选中本地文件夹右键—>Git在这里创建版本库;只在根目录出现一个名为.git的库管理文件夹。建好本地仓库后,需把仓库名发给管理员,管理员配置好远端及权限后,才可推送。 2.克隆远程的版本库 在本地目录右键—>Git克隆,输入远程仓库地址和本地副本目录 3.添加文件及文件夹 在文件夹中右键,选择"Git提交(C)",在提交窗口中选择所有需要提交的文件夹及文件并输入有效的注释。 add添加到暂存区,commit提交到本地仓库,push推送到远端。push是将本地仓库的元素推送到远端,暂存区和未受版本控制的不可被推送。

4.比较版本差异 选中需要查看提交记录的文件或文件夹,右键Git—>显示日志—>选择需要比较差异的两个版本,右键“比较版本差异”。(注意是比较已提交到本地仓库的版本差异,Git的比较差异菜单是比较工作副本和本地仓库的差异) 5.使用分支 5.1分支策略 主分支master:用于发布版本 开发分支develop:日常开发分支需要合并到master分支 临时性分支:功能分支feature、预发布分支release、修复bug分支fixbug. 功能分支从develop中分支出来,开发完成后再合并入develop后即可删除,名字采用feature-* 的形式命名。 预发布分支在正式颁布前,需要一个预发布的版本测试。从develop中分支出来,用完后合并到develop分支和master分支。 fixbug分支从master拉出,完成后合并到master并同步到develop分支。 5.2 分支创建 选中需要创建分支的项目,右键—>tortoiseGit—>创建分支。在弹出的窗口输入分支名,并选择合适的基准分支:

Git 19个常用的命令

Git 19个常用的命令 Git 19个常用的命令 1. 超实用 Alias 1 2 3 4 5 6 7 8 alias g="git" alias gb="git branch" alias gco="git checkout" alias gcmsg="git commit -m" alias gamend="git commit --amend -C HEAD" alias gst="git status" alias log="git log --oneline --graph --decorate --color=always" alias logg="git log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative" 2. 取回远端 master 与本地 master 分支合并 1 2 3 4 5 6 7 gco master g fetch --all 或者 g fetch origin master g reset --hard origin/master(本地没有修改,所以完全覆盖也没关系) 或者 g rebase origin/master (本地有修改还没push ) 3. 推送分支到远端 假设现在所在的分支是import ,指定推送到远端分支liujin-import 1 g push origin import:liujin-import 假如远端的 liujin-import 分支已经不需要,可以直接覆盖掉 1 g push -f origin import:liujin-import

gerrit git 常用操作

gerrit/git常用操作 1、代码下载方法 a. 下载整个工程代码: repoinit …… repo sync b. 下载部分模块代码 repoinit …… repo sync + projectPath 2、通过repo 提交代码 a.下载所需修改模块的代码 mkdir Test cd Test repoinit …… repo sync projectName b. 建立新分支:repo start branchName . / repo start branchNameprojectName c. 修改代码 d. git add . (提交所有修改到git缓冲区) / git add + FileName(只提交指定文件) e. git commit -s 格式要求: module: submodule: Message Title Blablabla Message Content Blablablablablablablablabla Ticket: APOLLO-20472 f. repo upload . / repo upload projectName g. 评审代码并submit。 3、直接通过gerrit pick Patch a.在gerrit上打开需要pick的patch b.点击“Cherry Pick To”按钮,在弹出的对话框中输入需要pick到的branch. 注意:如果无法直接pick过来,网页会直接报错,此时则需要按下面的步骤4手动pick,并解决冲突。 c.成功pick之后,会生成一个新的gerrit提交,并自动在Reviewer中加入了原Author,merge 之前让原Author确认。 d.评审代码并submit。 4、Pick冲突解决: 如果在gerrit上直接pick产生冲突,需要手动pick,并解决冲突:

GIT使用操作指南

GIT使用说明GIT使用说明

说明 本文档只是日常工作中一些使用步骤的简单归纳,旨在帮助大家快速用上GIT,如 有疏漏,请大家发邮件yuxiao.qiao@https://www.360docs.net/doc/516277902.html,,会及时进行改进,谢谢。文档简介 1.安装支持中文文件名的Git 命令行软件包MsysGit。 2.在MsysGit 中生成用来访问Git 版本控制库的公钥数据。 3.安装Git 图形界面客户端软件TortoiseGit。 4.配置TortoiseGit。 5.在服务器中新建版本库。 6.TortoiseGit使用简介。

目录 1.安装MSYSGIT (3) 2.生成SSH 密钥 (7) 2.1.Linux系统 (7) 2.2.Windows操作系统 (8) 2.3.添加ssh文件 (9) 3.安装TORTOISEGIT (11) 4.配置TORTOISEGIT (12) 5.新建版本库 (14) 6.TORTOISEGIT使用 (15) 6.1.Clone版本库 (16) 6.2.设置参数 (17) 6.3.新增文件 (18) 6.4.修改文件 (23) 6.5.删除文件 (28)

GIT 使用指南1.安装MsysGit 1.下载安装程序,下载地址: https://www.360docs.net/doc/516277902.html,/files/Git-1.8.1.2-preview20130201.exe 2.双击安装软件,进入安装页面,单击“next”,在以下页面中设置软件安装路 径。 3.配置命令行快捷方式,在安装中会出现设置如何与Windows 的文件浏览器结 合的界面,设置成“可在目录上点右键直接进入该目录的Git 命令行”,如 下图所示:

gitlab使用指南

gitlab使用指南 1 gitlab介绍 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。 GitLab是基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。 GitLab,它使用Ruby语言写成。后来,一些部分用Go语言重写。 2应用特点 1.Web框架使用RubyonRails。 2.基于MIT代码发布协议。 3.需要gitolite协同工作 3优点 GitLab为整个DevOps生命周期提供解决方案 1.管理 统计和分析功能。 GitLab提供统计数据和洞察力,以帮助提高GitLab在组织中的价值。 2.计划 项目计划和管理功能。 使用GitLab灵活的项目管理工具可视化,确定优先级,协调和跟踪进度。 3.创造 源代码以及数据创建和管理功能。 将源代码整合到一个易于管理和控制的分布式版本控制系统中,而不会影响工作流程。GitLab的Git存储库附带分支工具和访问控制,可为项目和代码的协作提供可扩展的单一事实来源。 4.校验 测试,代码质量和持续集成功能。 内置的静态代码分析,代码测试,代码质量,依赖项检查和Review Apps可以更快地发现错

误,提高安全性并缩短反馈周期。自定义您的批准工作流控件,自动测试代码质量,并为每个代码更改启动过渡环境。 GitLab持续集成是下一代测试系统,可以扩展以更快地运行测试。 5.包 Docker容器注册表。 GitLab软件包允许组织将GitLab用作各种常见软件包管理器的专用存储库。用户能够构建和发布程序包,这些程序包可以很容易地作为下游项目中的依赖项使用。 6.发布 应用程序发布和交付功能。 花更少的时间配置工具,而花更多的时间创建工具。无论要部署到一台服务器还是数千台服务器,都可以通过GitLab内置的持续交付和部署来自信,安全地构建,测试和发布代码。 7.配置 应用程序和基础结构配置工具。 使用GitLab Auto DevOps自动执行从构建到部署和监视的整个工作流程。最佳实践模板可帮助您从最小到零的配置开始。然后自定义所有内容,从构建包到CI / CD。 8.监控 应用程序监视和指标功能。 确保应用程序始终响应并可用。 GitLab会收集并显示已部署应用程序的性能指标,因此可以立即知道代码更改如何影响生产环境。 9.安全 安全功能功能。 检查应用程序是否存在安全漏洞,这些漏洞可能导致未经授权的访问,数据泄漏和服务拒绝。GitLab将对应用程序代码执行静态和动态测试,查找已知缺陷并在合并请求中报告这些缺陷,以便可以在合并之前修复它们。安全团队可以使用仪表板来获得项目和组的高级视图,并在需要时启动补救过程。 4运行gitlab gitlab-ctl start

Git版本控制的安装使用指南

1. 概述 Git是基于Linux内核开发的分布式版本控制/软件配置管理软件,与CVS、Subversion 等集中式版本控制软件不同,Git采用分布式管理,不需要服务器端软件即可运行。Git速度很快,并且具有很出色的合并追踪能力。很多有名的软件开发都使用Git来进行版本控制,其中有Linux内核、https://www.360docs.net/doc/516277902.html,服务器和OLPC内核开发等。 作为开源软件的代表,Git不对版本库的浏览和修改作任何的权限限制,因此只能采用其他工具实现权限管理,如gitosis、gitolite、CodeBeamer MR。 原本Git的使用只限于Linux/Unix,由于Cygwin、msysgit、TortoiseGit等GUI工具的出现,在Windows平台的使用逐渐成熟。 2. Git安装 2.1 安装Git 安装Git作为客户端,运行客户端可通过Git Bash(Git的命令行)或Git GUI操作。Windows下使用Git-1.7.8-preview20111206.exe,安装要点如下:

上述图片所示选项,似乎也不确定,网上帖子安装教程各种选项都有。安装完后,点击桌面Git Bash启动,执行命令pwd查看默认进入的文件目录,执行下面命令:mkdir .ssh (注意文件名前有.),即在默认目录下建立.ssh文件夹。修改环境变量,桌面右击我的电脑, 在属性中选择高级选项,左击环境变量,在系统变量中选择新建或编辑

下面列出一些问题的解决方法: a. Git Bash中ls不能显示中文目录(可直接打开编辑):在 git/etc/git-completion.bash中增加一行: alias ls='ls --show-control-chars --color=auto',注意引号为中文单引号,重启Git Bash b. Git commit不能提交中文注释:修改git/etc/inputrc中对应的行: set output-meta on set convert-meta off c. git log无法显示中文注释,在git/etc/profile中增加一行: export LESSCHARSET=iso8859 安装完后,需要在Git Bash中注册本人信息: git config --global https://www.360docs.net/doc/516277902.html, Your Name git config --global user.email your@email.address 在服务端,即Ubuntu,安装Git: sudo apt-get install git-core git-doc 3. Gitolite安装

GIT使用入门详细教程

GIT使用入门 Part 1 第一章基本原理 git是一个版本控制系统。官方的解释是:版本控制(Revision control)是一种软 件工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。按我的白话文解释就是:一群志同道合的人身处祖国各地,希望来合作开发一个 项目,假设这个项目是使用c语言写的(当然用任何语言都可以的)。那么大家怎么合作呢?用信件?效率太低。用邮件,不好实现多人沟通。用google group吧,可开发阶段中的源代码没法科学管理。用自建的网站吧,需要人力物 力财力来支撑阿。 这个时候版本控制系统就派上用场了。它可以让一个团队里的不同的人在不同地点、不同时间开发和改进同一个项目,并且在大部分的时间里,版本控制系统会聪明的帮你把不同的人在不同地点不同时间修改的代码融合到项目中去。(当然在一些特殊的情况,还是需要人去决定到底哪些代码需要加入到项目中,这个在后面讨论不迟,先让大家对版本控制有一个好印象,呵呵) 知道了版本控制系统的优点之后,下面就要具体实践和体验了。建议你选用的版本控制系统包括: rcs,cvs,svn,git,Mercurial,Bazzar等等。 当然git,Mercurial和Bazzar都是属于分布式版本控制系统。 下面是一些网友对于这些版本控制系统评论的只言片语: 1)svk配合svn可以实现分布式的版本控制。 2) 我是从SVN转到Git下的。我想Git的优势是速度飞快,谁用谁知道! 3) git的确是最快的,bzr慢的要死 4) SVN 在windows 下有TortoiseSVN 5) git 有Windows 版本,在google code 上的项目。https://www.360docs.net/doc/516277902.html,/p/msysgit/ 6) 大家可以试试国内提供的git服务。https://www.360docs.net/doc/516277902.html, 那么,简单地说,Git 究竟是怎样的一个系统呢?请注意,接下来的内容非常重要,若是理解了Git 的思想和基本的工作原理,用起来就会知其所以然,游刃

git常用命令文档

Git常用命令文档 master分支:主干、正式环境 develop分支: 开发环境 test分支:测试环境 一、创建 复制一个已创建的仓库: $ git clone ssh://user@https://www.360docs.net/doc/516277902.html,/repo.git 创建一个新的本地仓库: $ git init 二、本地修改 显示工作路径下已修改的文件: $ git status 显示与上次提交版本文件的不同: $ git diff 把当前所有修改添加到下次提交中: $ git add 提交本地的所有修改: $ git commit -a 提交之前已标记的变化: $ git commit 附加消息提交: $ git commit -m 'message here' 三、提交历史 从最新提交开始,显示所有的提交记录(显示hash,作者信息,提交的标题和时间): $ git log

四、分支与标签 列出所有的分支: $ git branch 切换分支: $ git checkout 创建并切换到新分支: $ git checkout -b 基于当前分支创建新分支: $ git branch 删除本地分支: $ git branch -d 更新与发布 将远程端版本合并到本地版本中: $ git pull origin master 将本地版本发布到远程端: $ git push origin : 删除远程端分支: git push origin --delete 五、合并与重置 将分支合并到当前HEAD中: $ git merge 六、撤销 放弃工作目录下的所有修改: $ git reset --hard HEAD 移除缓存区的所有文件(i.e. 撤销上次git add): $ git reset HEAD 将HEAD重置到指定的版本,并抛弃该版本之后的所有修改: 1. $ git reflog 2. $ git reset --hard

git基本操作命令

GIT日常操作命令 1、git三种状态 已提交(committed)已修改(modified)已暂存(staged) 2、获取项目的git仓库 git init//从当前目录初始化 git clone gitosis@192.168.2.4:soul/soul //从现有仓库克隆 3、配置git仓库相关信息 git config https://www.360docs.net/doc/516277902.html, "yayun.tian" git config user.email yayun.tian@https://www.360docs.net/doc/516277902.html, ….... 4、检查当前文件状态 git status 5、跟踪新文件 git add gir add --all//一次性跟踪当前目录全部文件注:可以创建一个名为.gitignore 的文件,列出要忽略的文件模式,例如: # – 此为注释将被git 忽略 *.a # 忽略所有.a 结尾的文件 !lib.a # 但lib.a 除外 /TODO # 仅仅忽略项目根目录下的TODO 文件,不包括subdir/TODO build/ # 忽略build/ 目录下的所有文件 doc/*.txt # 会忽略doc/notes.txt 但不包括doc/server/arch.txt 6、移除文件 git rm //移除暂存区的内容而且工作目录也连带删除注:如果仅仅想删除暂存区可以加上cached选项 — 7、提交 先用git diff --color 查看确认修改 git commit -a -m“comment”//comment代表此次修改的注释 git commit --amend //修改最后一次提交 如果忘记暂存某些文件就提交了,可以暂存后使用amend再次提交

Git的使用说明

Git的使用说明 2011.6.18 一,git的简单介绍 git是一个快速可扩充的分布式版本控制系统。 Git的绝大部分操作在本地完成,不用和集中的代码管理服务器交互,本地提交为commit,待完成一部分工作觉得有把握提交到服务器则是push。终于可以随时随地大胆地check in代码了。只有最终完成的版本才需要向一个中心的集中的代码管理服务器提交。 Git的分支管理branch管理容易多了,无论是建立新的branch,还是在branch之间切换都一条命令完成,不需要建立多余的目录。 二,git的个人本地使用及操作 1,创建Git库 cd 源码目录 git init #初始化在源码目录内生成一个.git的目录 2,注册用户信息(网上资料说是必需注册才能使用git工具,局域网内可不注册,直接用主机名,如pengwufeng@ubuntu) git config https://www.360docs.net/doc/516277902.html, XXX 用户名 git config user.email XXX 用户邮箱 git config –list #查看用户信息 3,向git库中添加或删除文件 git add XX #加单个文件 git add . #加所有 4,向版本库提交变化 git commit #提交(系统会默认让用户添加提交信息) git commit –m “XXXX”#直接添加简单提交信息 git status #查看项目状态 git log #查看版本信息 git log –p #查看版本信息并显示每次修改的diff git show sdjf974654dd…. #查看指定版本信息 #(show后面为每次提交系统自动生成的一串哈希值) git show sdji97 #一般只使用版本号的前几个字符即可 5,撤销与恢复 git reset git reset --hard #回到原来编辑的地方 #(同样适用于团队对于其他人的修改恢复)git reset --hard sdv143kvf…... #可回到指定的版本 #(hard后面为每次提交系统自动生成的一串哈希值)

git使用指南

Git使用指南 Li Yanrui v0.1,20080728 liyanrui.m2@https://www.360docs.net/doc/516277902.html,

前言 Git是什么 非常简单地说,Git是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。所谓版本控制系统(Version Control System),从狭义上来说,它是软件项目开发过程中用于储存我们所写的代码所有修订版本的软件,但事实上我们可以将任何对项目有帮助的文档交付版本控制系统进行管理。 2005年,Torvalds开始着手开发Git是为了作为一种过渡方案来替代BitKeeper,后者之前一直是Linux内核开发人员在使用的版本控制工具,当时由于自由软件社区中的许多人觉得BitKeeper的使用许可证并不适合自由软件社区的工作,因此Linus决定着手开发许可证更为自由灵活的版本控制系统。尽管最初Git的开发是为了辅助Linux内核开发的过程,但是现在很多其他自由软件项目中也使用了Git实现代码版本管理,譬如,https://www.360docs.net/doc/516277902.html,项目、许多https://www.360docs.net/doc/516277902.html,的项目、Ruby项目等。 为什么使用版本控制系统 版本控制系统是为懒人准备的,它让懒人们比那些善于备份文档的勤劳人拥有更干净的文件系统以及更多的可以活着的时间。 本文档主要内容 在第1章中讲述如何使用Git管理自己的个人文档,主要是初步熟悉Git的诸多概念及其日常基本命令的使用。第2章中主要讲述如何基于Git实现多人协作的项目开发模式,以此扭转当前实验室成员在项目研发中各自为政或不能有效沟通的现状。第3章讲述如何利用Git强大的项目分支管理功能实现良好风格的项目协同开发模式。第4章为Git使用之FAQ,用于记载在本实验室推广使用Git过程中诸位同学所遇到的一些细节问题。

git常用命令集详解

git使用记录 1.生成密匙: ssh-keygen-t rsa几次回车,在.ssh/下的id_rsa.pub即为密匙文件; 2.获取git分支: A.远程获取:(路径须绝对路径) git clone git@192.168.1.50:/home/git/repositories/A20-Android4_2.git. (注意在最后加个点是为了避免clone时在当前目录下新建一个git目录) B.本地获取:(路径为相对路径即可) git clone git@192.168.1.50:A20-Android4_2.git. C.查看所获取分支的路径: git remote-v D.切换到某个分支: git checkout$branchname 3.分支的新建与删除: A.新建: git branch$branchname(注意在哪个分支上执行就是基于哪个分支新建) git push origin$branchname(推到服务器仓库) B.删除: git branch-D$branchname(删除本地的分支) git branch-rd origin/$branchname(删除服务器仓库分支) git push origin:$branchname(注意冒号) git remote prune origin(同步远端已删除分支)

4.修改内容查看及提交: A.查看未提交的修改: git status/git status.(查看修改的文件) git diff/git diff.(查看修改的内容) B.查看已提交修改: git log(查看提交信息) git whatchanged(查看每个提交修改的文件) git diff$2$1(查看莫个"提交ID"$1的修改内容) C.还原被修改文件: git checkout-f*/$fileanme D.提交修改: git add*/$filename(将新建文件加入仓库) git commit*/$filename-m"***"/git commit-a-m""(提交修改/提交当前所有修改,删除一个文件也可以) git push origin$branchname E.还原到某个提交ID前: git reset“$提交ID”(注意避免冲突:如果本地有修改过即将还原的文件,可以先备份it,然后git checkout-f$it) git push origin$branchname--force git pull origin$branchname F.提取同一仓库不同分支的修改: git cherry-pick“$提交ID”

Git常用操作命令收集

Git常用操作命令收集: 1) 远程仓库相关命令 检出仓库:$ git clone git://https://www.360docs.net/doc/516277902.html,/jquery/jquery.git 查看远程仓库:$ git remote -v 添加远程仓库:$ git remote add [name] [url] 删除远程仓库:$ git remote rm [name] 修改远程仓库:$ git remote set-url --push [name] [newUrl] 拉取远程仓库:$ git pull [remoteName] [localBranchName] 推送远程仓库:$ git push [remoteName] [localBranchName] 2)分支(branch)操作相关命令 查看本地分支:$ git branch 查看远程分支:$ git branch -r 创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支切换分支:$ git checkout [name] 创建新分支并立即切换到新分支:$ git checkout -b [name] 删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项 合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并 创建远程分支(本地分支push到远程):$ git push origin [name] 删除远程分支:$ git push origin :heads/[name] 3)版本(tag)操作相关命令

git常用命令解释

GIT ANG REPO USAGE 1 git command 1.1 git add ?git add . #将文件先暂存到staging area, stages new and modified, without deleted ?git add -A #states all ?git add -u #states modified and deleted, without new ?git add -i #进入互动模式 ?git add filename #新增一个文件 ?git add modify-file #修改过得文档也要加add,不然在commit时要加-a 1.2 git rm #删除文件 ?git rm filename 1.3 git mv #修改文件名,或搬移目录 ?git mv filename newfilename 1.4 git status #查看状态 1.5 git commit ?git commit ?git commit -m 'commit message' ?git commit -a -m "message" ?git commit -a -v #-v查看修改的内容 1.6 git branch

?git branch #列出所有的分支 ?git branch new-branch #产生新的分支 ?git branch new-branch master #由master产生新的分支 ?git branch -d branch #删除分支 ?git branch -D branch #强制删除分支 ?git checkout -b new-branch #产生新分支并切换过去 ?git branch -r #列出所有repository branch ?git branch -a #列出所有分支 1.7 git checkout ?git checkout branch-name #切换到branch-name ?git checkout master #切换到master ?git checkout -b new-branch master #从master建立新的分支,并切换过去?git checkout -b new-branch #由当前分支建立新分支 ?git checkout -b new-branch origin #由origin建立分支 ?git checkout filename #还原状态到repository状态 ?git checkout HEAD . #将所有文件都checkout出来 ?git checkout xxxx . #xxxx是commit的编号的前四位,将xxxx编号的版本checkout出来 ?git checkout – * #恢复上一次commit的状态 1.8 git diff ?git diff master #与master对比看哪些文件不同 ?git diff –cached #比较staging area与repository ?git diff tag1 tag2 #tag1与tag2比较 ?git diff tag1:file1 tag2:file2 #tag1的file1与tag2的file2比较 ?git diff #当前与staging area比较 ?git diff HEAD #当前与repository比较 ?git diff new-brach #当前与new branch的比较 ?git diff –stat 1.9 git tag

相关文档
最新文档