GIT的介绍就不多说了。这里只是简单的写些入门的操作。
重点介绍历史版本的查看和控制相关的操作。
一切从简,不讲大道理,只讲简单的操作。
原创文章,如有转载,请注明出处:http://blog.youkuaiyun.com/yihui823/article/details/6681214
以铜为镜,可以正衣冠;
以史为镜,可以知兴替;
以人为镜,可以明得失
我们要以旧版本为镜,可以知道自己的成长历程
进入git控制的目录,试试 gitk
(哇~有图形了啊)
呵呵,别激动哦。
我们简单的描述一个例子:
a)初始化操作
有两个文件file1.txt和file2.txt
1, 初始化的时候就有这两个文件
操作:
git init
git status
git add .
git commit -m “init version”
2, 在master分支上修改了file1.txt,并提交
操作:
(修改file1.txt)
git add file1.txt
git commit -m “change file1”
3, 然后新建分支banana,并切换到banana分支上
操作:
git branch banana
git checkout banana
4, 修改file1.txt和file2.txt,并提交。
操作:
(修改file1.txt和file2.txt)
git add file1.txt file2.txt
git commit -m “change by banana”
这个时候,我们可以输入 gitk,查看一下当前的版本情况。如下图:git-001
5, 然后,切换到master分支上,修改file2.txt,并提交。
操作:
git checkout master
(修改file2.txt)
git add file2.txt
git commit -m “change by master”
输入gitk,查看当前版本情况,如下图:git-002
b)发现问题需要查看历史版本
我们现在发现当前的版本有点问题,还不能提交到版本库。
1,我们需要从git commit中返回.
则输入:
git reset --soft HEAD^
解释一下,HEAD是当前分支的最新版本。^表示父节点。当前节点的父节点,就是上一次提交的版本。也就是标记为“change file1”的版本。
问为什么不是”change by banana”这个版本呢?不同的分支哦。”change by banana”是banana分支的最新代码,和master分支不同的。
这个时候输入
git status
看看,是不是显示file2.txt修改了没有提交呢。
2,我们需要从git add中返回
再仔细查看之后,我们发现file2.txt真的写错了,需要返回到git add之前的状态。
输入:
git reset -q file2.txt
这个时候,file2.txt就回到了解放前了。用git status查看一下,file2.txt是”change not staged for commit”状态。
3,回到没有做过的情况
我们最终确定,最后一次修改的file2.txt是无用的代码,我们需要废弃掉。
注意,这个操作不能恢复的哦。
git reset --hard
这个命令,不能指定具体的文件。是把当前的修改全部清除,恢复到最后一次提交的版本。
这个时候,用gitk查看一下:git-003
已经彻底回复到了“change file 1”的版本了。
4,直接回复到某个版本
我们现在切换到banana分支。
git checkout banana
然后用gitk看一下。可以看出,我们之前的操作,对banana分支一点影响也没有。现在我们需要把banana分支回复到初始状态,但是当前的改动的代码还是需要留着。我们可以看,init版本是当前版本的父节点的父节点。我们可以这么操作:
git reset --soft HEAD^^
然后用gitk看一下:git-004
最近的版本已经变成了init version了。所有的改动都是add未提交状态。
5,得到当前最新代码
最后。我们把file1.txt和file2.txt都删掉。我们需要从版本库中取得当前最新的代码。
很简单:
git checkout master
如果是要banana分支的最新代码,则:
git checkout banana
以上的操作,我们知道了如何查看版本分支,和如何回复到以前的版本。
GIT的介绍就不多说了。这里只是简单的写些入门的操作。
这里重点写两个人互相配合以及合并代码的操作。
一切从简,不讲大道理,只讲简单的操作。
原创文章,如有转载,请注明出处:http://blog.youkuaiyun.com/yihui823/article/details/6681240
我们既然不讲什么大道理,那么我们就模拟一个具体的操作场景出来。
场景一
1,张三在做一个项目。用git控制项目。
2,李四花一周时间帮张三完成一个功能。
3,在这一周内,张三自己也在工作。
4,一周后,李四把工作成果给张三。
5,张三把李四的工作合并到自己的项目中。
1. 张三初始化项目的git
+ (张三操作)
>> cd [work path]
>> git init
>> git add file1.txt file2.txt
>> git commit -m “init version”
>> git config user.name “zhangsan”
>> git config user.email “zhangsan@gmail.com”
2. 张三用git控制自己的项目
+ (张三操作)
>> cd [work path]
>> [修改了file1.txt]
>> git add file1.txt
>> git commit -m “change 1”
3. 李四拿到张三的代码
+ (李四操作)
>> cd [work path] (李四的工作目录)
>> git clone git://zhangsan/zhangsanwork .
>> git config user.name “lisi”
>> git config user.email “lisi@gmail.com”
>> git status(看看而已)
>> git branch lisimodify (新建自己的分支)
4. 李四修改了file1.txe和file2.txt
+ (李四操作)
>> cd [work path] (李四的工作目录)
>> [修改file1.txe和file2.txt]
>> git add file1.txt file2.txt
>> git commit -m “changed by lisi”
5. 张三修改了file1.txe和file2.txt
+ (张三操作)
>> cd [work path] (张三的工作目录)
>> [修改file1.txe和file2.txt]
>> git add file1.txt file2.txt
>> git commit -m “zhangsan changed”
6. 李四提交版本给张三
+ (李四操作)
>> cd [work path] (李四的工作目录)
>> git push origin lisimodify
(合并的工作交给张三啦,啦啦啦!)
7. 张三合并李四的工作
+ (张三操作)
>> cd [work path] (张三的工作目录)
>> git branch (看看有没有lisimodify的分支)
>> git merge lisimodify (修改了同一行,所以有问题)
>> vi file2.txt [处理冲突]
>> git add file2.txt
>> git commit -m “add lisi work”
场景二
1,张三继续修改,又需要李四的帮忙。
2,李四下载张三的最新代码。
3,在这一周内,张三自己也在工作。
4,张三没有时间合并代码,需要李四合并。
5,李四再次下载张三最新代码,合并版本。
合并期间,张三停止修改代码。
6,李四把合并后的代码提交给张三。张三直接切换到新的分支中。
1. 张三修改了file1.txe和file2.txt
+ (张三操作)
>> cd [work path] (张三的工作目录)
>> [修改file1.txe和file2.txt]
>> git add file1.txt file2.txt
>> git commit -m “zhangsan changed”
2. 李四下载张三当前版本
+ (李四操作)
>> cd [work path] (李四的工作目录)
>> git pull [zhangsan url]
>> git branch (看看在哪个分支上)
3. 李四修改代码
+ (李四操作)
>> cd [work path] (李四的工作目录)
>> [修改代码]
>> git add file1.txt
>> git commit -m “modify again by lisi”
4. 张三继续工作,修改了file1.txe
+ (张三操作)
>> cd [work path] (张三的工作目录)
>> [修改file1.txe]
>> git add file1.txt
>> git commit -m “zhangsan changed again”
5. 李四准备合并版本。新建分支并下载张三的最新代码
+ (李四操作)
>> cd [work path] (李四的工作目录)
>> git branch newversion
>> git checkout newversion
>> git pull [zhagnsan url]
(如果没有冲突,就会是自动合并)
6. 李四提交版本给张三
+ (李四操作)
>> cd [work path] (李四的工作目录)
>> git push origin newversion
(搞定啦,啦啦啦!)
7. 张三切换到最新版本
+ (张三操作)
>> cd [work path] (张三的工作目录)
>> git checkout newversion
(看看file1.txt,是不是最新的~)