用git已经一段时间了,在使用过程中,一直用不好界面客户端,并且由于需要在两套系统windows7和centos6.5上使用git,所以切换回了命令行方式,使用过程中常用的命令进行记录以及简单的解释。
1、初始化:
目前为止,并没有自己初始化过本地库,只是从远程库里面克隆,命令为:
git clone + 远程路径。
2、分支管理
我最喜欢的就是git的版本控制功能,在将远程库克隆到本地后,会有一个master分支,通常我们并不在这个分支上进行开发,而是新建一个自己的分支。这就涉及到git的分支管理。分支管理,无非就是对分支进行CRUD操作。
2.1查看分支 git branch
这时候会列出所有的分支。
由于刚刚checkout出来,所以现在只有一个分支,就是master(默认分支)
现在我们新建我们的开发分支,命令为:git branch +分支名
新建一个名为dev的开发分支:git branch dev
没有消息返回,就说明已经创建成功了,我们用 git branch重新查看一下,发现:果然多了一个dev分支
这个时候,我们发现master 的前面有一个*,这个代表当前分支,如果*在master前面,说明当前的分支是master,那么如何将分支切换到dev上面呢。
切换分支:git checkout +分支名
切换到dev分支:git checkout dev
这个命令很友好,告诉我们,switched to branch ‘dev’
这时候我们重新查看发现,可爱的小星星已经转移到dev分支上了
这个时候,就可以去开发了,有人会疑惑,为什么要切换到其他分支上开发,我一开始也很不理解,但是慢慢的用用,发现这个好处是说不完的,留待慢慢体会吧。
下面我们继续。
已经切换到开发分支了。我们来进行开发。去修改一下代码码。
我修改了./projects/service/pom.xml文件,(在dev分支上修改的)像其他版本控制工具一样,修改完代码,得提交。在提交之前,我们得先看一下,我们修改了哪些东西,。肿么看呢,肯定也是命令行勒。
查看修改:git diff 默认比较的是当前分支的上次提交,和现在代码的区别。注意,是当前分支(dev),上次提交(第一次创建)与当前修改的比较。这段比较绕口,但是你得很清楚。
输入命令:git diff
你可能看不懂这是神马东东,我简单解释一下,
-
+
如果修改的文件比较多,你可能需要分页查看,space键是向下翻,B键是向上翻。
如果想比较某个指定的文件,也是可以的,命令
git diff ./projects/service/pom.xml 表示的就是表示从当前目录开始的/projects/service/pom.xml文件。
(git diff还有很多用法,请用git help diff命令进行查看。我们暂时介绍到这里)
比较完成后,我们知道哪里做出了修改,并且确认这样改是我需要的(并不一定是正确的),那我们就需要提交到分支上。
这个时候,我们该提交了,但并不是直接commit,因为git是linus这个货开发的,这货就是想要自由,直接commit是不自由的,所以,不能直接提交。为什么呢,因为git给了你提交的自由–你要提交什么?
这个时候,你需要git add一下,来告诉git,你要提交哪些东西。
如果我们要将所有修改都提交到dev版本库。 那就git add . 。因为“.”表示将所有修改都提交到版本库。如果不是将所有修改提交。那就制定文件
git add – file
例子:git add – ./projects/service/pom.xml
在添加文件以后,我们就可以提交了,提交的命令 git commit -m “say something”
在提交的时候,需要强制制定注释,就是你为什么进行这次提交,也是为了便于将来查询。
提交的过程中,会有一些提示,告诉你提交了哪些东西。
这个时候,你已经完成了一次提交,可是任务远远没有完成。因为你提交到了本地的版本库dev,远程的版本库里面,并没有你修改的代码。那么我们来将我们修改的代码提交到远程版本库。
明确一下目标:我们要将我们的修改提交到远程版本库。
存在的问题:可能存在冲突,这个怎么弄呢。
于是,我们按照下面的方式进行操作。
1、切换回master分支,进行pull操作。
命令:git pull (按照提示输入密码)
2、这个时候,我们的master是最新的代码了。我们在本地处理冲突。
3、处理冲突,首先先比较。比较的命令:git diff
git diff 后面可以跟着两个分支,我们现在有两个分支master 和 dev 。可以进行比较 git diff master dev 和git diff dev master 这两种比较方式的出的结果正好相反的。
比较的规则:以第一个分支为基准,如果第二个文件增加了一行,会以+
4、比较完了差异,我们就要“自由的”选择我们需要提交的内容。
我建议以master和远程版本库进行提交。这样提交清晰,并且不容易出错。
这个时候,我们就要将dev的修改合并到master分支,以便master能将本地修改提交到远程版本库。合并的命令 git merge
git merge + 分支名称:表示将指定分支的修改合并到当前分支,如果当前分支为master 那 git merger dev 直接就将dev的所有修改都合并到master上了
这个时候,如果有冲突,那我们就要手动处理冲突,处理完冲突,提交就好了。
5、在处理冲突过程中,有一些技巧性的命令。
例如,如果master和我们的dev冲突了,那我们可以将master的内容checkout到master上,然后将我们的修改添加到新checkout出来的文件上,指定文件checkout的命令
git checkout master – ./projects/service/pom.xml
将master的./projects/service/pom.xml文件checkout到当前目录。
所有的冲突处理完毕后,我们的修改就已经完成了,这个时候只要git push 到远程版本库就好了。
ps:有人说git的使用比SVN、CVS要复杂,我也承认,但是在实际开发中,熟练的使用git能让我们的工作更有弹性。熟练以后,你会发现,git简直太伟大了,真的太爽了。
以前我是闭眼式开发,就是自己写过些什么,从来不知道。只知道用其他版本控制软件的客户端比较一下,如果是需要提交的,提交,否则删除。使用了git后,我发现对代码的要求更高了一些。尤其是使用命令行的方式,git会告诉我哪里多了一个空行,这里可能会影响代码的风格,也许这里是需要修改的。
在这里很感谢我公司的技术负责人,他从事开发工作20年了,但仍然带领我们走在技术革新的路上。让我这个年轻人心中有愧。希望自己快点成长起来吧!
转自http://blog.csdn.net/liushuilining/article/details/40706257