Git常用命令merge
1、merge
分支合并
# 合并指定分支到当前分支
$ git merge branch
# 可能出现冲突,这时候就需要你修改这些文件来手动合并这些冲突
# 改完之后,你需要执行如下命令以将它们标记为合并成功
$ git add filename
# 合并远程master分支至当前分支
$ git merge origin/master
git 一般有以下三种 merge 方式:
- fast-forward
- no fast forward
- squash
git merge 默认使用的 fast-forward 的合并方式。
1.1 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
1.2 no fast forward
$ 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
1.3 squash
$ git merge branch --squash
–squash:不会生成新的提交,会将被合并分支多次提交的内容直接存到工作区和暂存区,由开发者手动去提文章来源:https://www.toymoban.com/news/detail-473732.html
交,这样当前分支最终只会多出一条提交记录,不会掺杂被合并分支的提交历史。文章来源地址https://www.toymoban.com/news/detail-473732.html
$ 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
到了这里,关于Git常用命令merge的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!