Git中的合并操作
上次的博客,我们讲解了Git的分支基本作用,这里,我们就来拓展一下,Git中的合并操作
git log
情景提要,上次我们是在
master
分支下有着a.txt
和README.md
,而创建的feature1
分支下有b.txt
文件
然后回归我们的主题,再次之前,我们先来学习一下
git log
的操作,这个操作是查看git操作的日志,所以,让我们学习一下,为了更好的讲解这个较为重要的命令行git log
,我提前使用git merge feature1
的合并操作。So
在上图中,我们先是用了
git merge
操作将feature1
分支合并到了msater
的主分支,并用git branch -d feature1
删除了分支
git log
查看当前分支的log日志,可以看到,有我前面合并操作的日志,因为feature1
分支中只有b.txt
所以就只有add b.txt
git log --oneline
这个命令就是上图,能让log界面更加的简洁,另外git log --oneline -3
就是查看前几位
git show <commit id>
如果你想看某个操作更加详细的日子,你就可以用这个命令,后面的的id就是你想看的日志id,可以清楚的看到,我们这个日志就只是添加了一个b.txt,而且b.txt的内容都有显示
git log --all --decorate --oneline --graph
,这个命令能让log日志看起来更加的顺眼,虽然现在看不出来,但是确实有用
上述的
git log --all --decorate --oneline --graph
,虽然有用(emmm,等会再说哪有用),但是命令实在是太长了,所以我这里在教一点干货,输入
vi ~/.gitconfig #修改git的配置环境
# 输入以下代码
[alias]
co = checkout
br = branch
ci = commit
st = status
dog = log --all --decorate --oneline --graph
上述代码就是可以简易的输入,
git log --all --decorate --oneline --graph
就等于git dog
log日志讲解
我们先
git checkout -b f1
创建分支并跳转到f1
分支,然后在f1
分支下生成c.txt
,并添加This is c.txt
,然后commit一下
因为前面我们配置了config,所以我们就可以使用简洁字母进行操作。另外我们可以看一眼log日志第一行的
Head -> f1
,可以理解成指针指向f1分支,也就是在f1分支下进行了后面的add c.txt
操作,我们用git show 11293e0
可以详细查看我们进行了什么操作
上图中我们可以看到,
merge
用的是Fast-foward
方式,这个方式是直接帮你提交了,逻辑并不是很好/有兴趣可以去研究一下,输入git merge --help
就能看官方文档了。这里我就推荐大家用git merge f1 --no-ff
,这个方法能让我们的日志看的更加的清晰。如下图
我先是跳转到f1的分支,创建了一个d.txt文件,并提交一次,然后
回主master分支,它也提示了比master分支多了2个commits
输入
git merge f1 --no-ff
时,它会提醒了进行适当的修改,你可以不改,按一下esc
,并按shift'+:'
,shift加冒号,输入wq
退出,然后输入git log
查看,你会发现它先是在f1的分支下add一次,然后合并到master主分支。如果你还是看不出来,这个时候你就可以输入git log --all --decorate --oneline --graph
或者是配置完了的git dog
,git log --oneline
也还可以,但是显然前者更加的显而易见
上传到远程仓库
我们用
git push
方法,上传到远程仓库,注意,这里的上传默认是master
分支
所以我们用
git push origin f1:feature1
,本地是f1分支,仓库是feature1,如果名称不对,会自动创建一个。
我们先在远程仓库的master分支下修改a.txt,然后在本地的master分支下进行
git pull
操作,如果要在master分支下
上述的操作,只能将github上的修改的pull到master分支内,f1分支并没有修改
所以我们如果想要f1分支和master分支同步,我们进入f1分支,然后执行
git merge
操作
但是我们也是可以用
git rebase master
的方法合并,因为我也是不是十分的清楚这两者的关系,所以我就简单得把我的理解阐述一遍
merge rebase 区别
merge 操作试讲两个分支的历史连接在一起;合并操作;更加关注历史记录
rebase 如上就是f1分支移动到master分支的最后一次commit,不会像merge一样又一次不必要的commit,没有提交操作,只是复制
rebase 黄金法则:绝对不要再公共分支使用rebase master
分支冲突
我们先新建分支f2,并修改a.txt。然后切换到f1分支,修改a.txt文件。然后进入f2分支进行合并(merge),这个时候就会发生冲突(记得修改要commit一次),如下:
上图发生的,a.txt就变成第二个红线框,框内上面的就是本来自己的(Head),下面那个就是冲突的。所以我们就要修改,第一种方法就是直接用编辑器修改,另外一种就是输入
git mergetool
,并敲回车,就可以进去对所有发生冲突的文件进行修改(这里就不贴图了,记住这个git mergetool
就行)
对了修改后,会生成一个
a.txt.orig
,这个就是发生冲突的记录
这次的博客就到这里了,So
Just have fun...