赞
踩
分支合并
# 合并指定分支到当前分支
$ git merge branch
# 可能出现冲突,这时候就需要你修改这些文件来手动合并这些冲突
# 改完之后,你需要执行如下命令以将它们标记为合并成功
$ git add filename
# 合并远程master分支至当前分支
$ git merge origin/master
git 一般有以下三种 merge 方式:
git merge 默认使用的 fast-forward 的合并方式。
fast-forward:会在当前分支的提交历史中添加进被合并分支的提交历史。git 直接把 HEAD 指针指向合并分支的
头,完成合并。属于快进方式,不过这种情况如果删除分支,则会丢失分支信息,因为在这个过程中没有创建
commit。
$ git merge branch
# 等价于
$ git merge branch --ff
# master分支 touch a.txt git add a.txt git commit -m "add a.txt" touch b.txt git add b.txt git commit -m "add b.txt" touch c.txt git add c.txt git commit -m "add c.txt" $ git log --oneline 0786621 (HEAD -> master) add c.txt 555418e add b.txt dbc2292 add a.txt
# branch1分支 $ git checkout -b branch1 echo a > a.txt git add a.txt git commit -m "update a.txt" echo b > b.txt git add b.txt git commit -m "update b.txt" echo c > c.txt git add c.txt git commit -m "update c.txt" $ git log --oneline d5a7969 (HEAD -> branch1) update c.txt fe86d72 update b.txt f1f9f3d update a.txt 0786621 (master) add c.txt 555418e add b.txt dbc2292 add a.txt
$ git merge branch1
Updating 0786621..d5a7969
Fast-forward
a.txt | 1 +
b.txt | 1 +
c.txt | 1 +
3 files changed, 3 insertions(+)
$ git log --oneline
d5a7969 (HEAD -> master, branch1) update c.txt
fe86d72 update b.txt
f1f9f3d update a.txt
0786621 add c.txt
555418e add b.txt
dbc2292 add a.txt
$ git merge branch --no-ff
–no-ff 表示禁用 fast forwad,之后查看日志时是可以看到已被删除分支的信息。
指的是强行关闭 fast-forward 方式,会创建一个新的 commit。
–no-ff 会生成一个新的提交,让当前分支的提交历史不会那么乱。
$ git merge branch1 --no-ff
Merge made by the 'recursive' strategy.
a.txt | 1 +
b.txt | 1 +
c.txt | 1 +
3 files changed, 3 insertions(+)
$ git log --oneline
09ccaae (HEAD -> master) Merge branch 'branch1'
d5a7969 (branch1) update c.txt
fe86d72 update b.txt
f1f9f3d update a.txt
0786621 add c.txt
555418e add b.txt
dbc2292 add a.txt
$ git merge branch --squash
–squash:不会生成新的提交,会将被合并分支多次提交的内容直接存到工作区和暂存区,由开发者手动去提
交,这样当前分支最终只会多出一条提交记录,不会掺杂被合并分支的提交历史。
$ git merge branch1 --squash
Updating 0786621..d5a7969
Fast-forward
Squash commit -- not updating HEAD
a.txt | 1 +
b.txt | 1 +
c.txt | 1 +
3 files changed, 3 insertions(+)
$ git log --oneline 0786621 (HEAD -> master) add c.txt 555418e add b.txt dbc2292 add a.txt zhangshixing@DESKTOP-CR3IL33 MINGW64 ~/Desktop/test/u3 (master) $ ls a.txt b.txt c.txt $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: a.txt modified: b.txt modified: c.txt $ cat a.txt a $ cat b.txt b $ cat c.txt c
$ git add a.txt b.txt c.txt $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: a.txt modified: b.txt modified: c.txt $ git commit -m "update a.txt | update b.txt | update c.txt" [master b34e050] update a.txt | update b.txt | update c.txt 3 files changed, 3 insertions(+) $ git log --oneline b34e050 (HEAD -> master) update a.txt | update b.txt | update c.txt 0786621 add c.txt 555418e add b.txt dbc2292 add a.txt $ git status On branch master nothing to commit, working tree clean
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。