当前位置:   article > 正文

Git常用命令merge_gitmerge命令

gitmerge命令

Git常用命令merge

1、merge

分支合并

# 合并指定分支到当前分支
$ git merge branch
# 可能出现冲突,这时候就需要你修改这些文件来手动合并这些冲突
# 改完之后,你需要执行如下命令以将它们标记为合并成功
$ git add filename
  • 1
  • 2
  • 3
  • 4
  • 5
# 合并远程master分支至当前分支
$ git merge origin/master
  • 1
  • 2

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
  • 1
  • 2
  • 3
# 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
# 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
$ 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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

1.2 no fast forward

$ git merge branch --no-ff
  • 1

–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(+)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

$ 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

1.3 squash

$ git merge branch --squash
  • 1

–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(+)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
$ 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
$ 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/321350
推荐阅读
相关标签
  

闽ICP备14008679号