Git常用命令merge

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常用命令merge_第1张图片

$ 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:不会生成新的提交,会将被合并分支多次提交的内容直接存到工作区和暂存区,由开发者手动去提

交,这样当前分支最终只会多出一条提交记录,不会掺杂被合并分支的提交历史。

$ 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 ..." 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 ..." 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,git)