当前位置:   article > 正文

GIT分支合并命令之git-merge_git merge命令

git merge命令

名称

git-merge - 用于将两个或两个以上的开发历史加入(合并)一起

概要

  1. #形式一
  2. git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
  3. [--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
  4. [--[no-]allow-unrelated-histories]
  5. [--[no-]rerere-autoupdate] [-m <msg>] [-F <file>] [<commit>…​]
  6. #形式二
  7. git merge (--continue | --abort | --quit)

描述

【形式一】

将命名提交中的更改(自其历史记录与当前分支分开以来的时间)合并到当前分支中。

git pull 命令也是使用此命令来合并另一个存储库中的更改,并且可以手动使用它来将一个分支中的更改合并到另一个分支中。

假设存在以下历史记录,并且当前分支为“ master”:

  1. A---B---C topic
  2. /
  3. D---E---F---G master

然后,“git merge topic”将在topic 分支上所做的更改重放在master之上,因为它与master在commit E岔开,直到其当前commit C,并将结果记录在新提交中,并带有名称 两个父提交和一个来自用户描述更改的日志消息。

  1. A---B---C topic
  2. / \
  3. D---E---F---G---H master

【形式二】

第二种语法(“git merge --abort”)只能在合并导致冲突后运行。

git merge --abort 将中止合并过程并尝试重建合并前状态。 但是,如果合并开始时有未提交的更改(特别是在合并开始后进一步修改了这些更改),则git merge --abort 在某些情况下将无法重建原始(合并前)更改。因此,

警告:不建议对重要的未提交的更改进行git merge:可能的话,它可能使你处于在发生冲突的情况下很难退出的状态。

第三种语法("git merge --continue")只能在合并导致冲突后运行。

选项OPTIONS

--commit

执行合并并提交结果。 此选项可用于覆盖--no-commit。

--no-commit

使用--no-commit可以在创建一个合并提交(merge commit)之前执行合并并停止,从而使用户有机会在提交之前检查并进一步调整合并结果。

请注意,快进更新不会创建一个合并提交,因此无法通过--no-commit停止这些合并。 因此,如果要确保合并命令不会更改或更新分支,请使用--no-ff和--no-commit。

--edit    -e

--no-edit

在提交成功的合并之前,调用编辑器以进一步编辑自动生成的合并消息,以便用户可以解释并证明合并的合理性。 

--no-edit选项可用于接受自动生成的消息(通常不建议这样做)。

如果要在命令行中使用-m选项提供草稿消息,并希望在编辑器中对其进行编辑,则--edit(或-e)选项仍然有用。

--cleanup=<mode>

此选项确定提交前如何清除合并消息。See git-commit[1]for more details.

--log[=<n>]

--no-log

In addition to branch names, populate the log message with one-line descriptions from at most <n> actual commits that are being merged. See also git-fmt-merge-msg[1].

With --no-log do not list one-line descriptions from the actual commits being merged.

--stat

-n

--no-stat

在合并结束时显示diffstat。 diffstat也由配置选项merge.stat控制。

使用-n或--no-stat在合并结束时不显示diffstat。

-s <strategy>

--strategy=<strategy>

使用指定的合并策略; 如果没有-s选项,则使用内置策略列表代替(合并单个头部时使用 git merge-recursive策略,否则使用git merge-octopus策略)。

-X <option>

--strategy-option=<option>

将指定的合并策略选项传递到合并策略。

-m <msg>

设置要用于合并提交的提交消息(如果创建了一个)。

如果指定了--log,则将被合并的提交的简短日志附加到指定的消息中。

-F <file>

--file=<file>

从file文件中读取要用于合并提交的提交消息

If --log is specified, a shortlog of the commits being merged will be appended to the specified message.

--abort

中止当前的冲突解决过程,并尝试重构合并前状态。

如果合并开始时存在未提交的工作树更改,则git merge --abort在某些情况下将无法重构这些更改。 因此,建议始终在运行git merge之前提交commit或存储stash更改。

git merge --abort 等效于MERGE_HEAD存在时的git reset --merge

--quit

Forget about the current merge in progress. Leave the index and the working tree as-is.

--continue

由于冲突而停止git合并后,您可以通过运行git merge --continue结束合并(请参见下面的“如何解决冲突”部分)。

<commit>…​

合并到我们的分支中的其他分支的commit(通常是其他分支的head提交)。

如果没有指定要合并的commit,则合并当前分支配置的作为其上游的远程跟踪分支。

 

 

示例

示例-1

合并分支fixesenhancements在当前分支的顶部,使它们合并:

$ git merge fixes enhancements

示例-2

合并obsolete分支到当前分支,使用ours合并策略:

$ git merge -s ours obsolete

示例-3

将分支maint合并到当前分支中,但不要自动进行新的提交:

$ git merge --no-commit maint

当您想要对合并进行进一步更改时,可以使用此选项,或者想要自己编写合并提交消息。应该不要滥用这个选项来潜入到合并提交中。小修补程序,如版本名称将是可以接受的。

示例-4

将分支dev合并到当前分支中,自动进行新的提交:

$ git merge dev

示例-5 合并分支及冲突解决

我们有一个master分支,然后签出一个bugFix分支,用于修复bug,修改test.txt文件;此时在master分支上继续进行开发,也编辑了test.txt文件;之后将bugFix分支合并到master分支时会出现冲突。

1.签出bugFix分支之前,test.txt文件内容是

1.在出现分支之前编辑的信息

2.两个分支同时对同一个文件进行修改

2.1签出bugFix进行bug修复,编辑test.txt文件内容

  1. 1.在出现分支之前编辑的信息
  2. 2.修改bug编辑的信息

2.2在master分支上,编辑test.txt文件内容

  1. 1.在出现分支之前编辑的信息
  2. 2.master主分支继续开发编辑的信息

3.切换到master分支git checkout master,并合并bugFix分支

  1. yaosht@yaosht-PC MINGW64 /d/git/doc (master)
  2. $ git merge bugFix
  3. Auto-merging test.txt
  4. CONFLICT (content): Merge conflict in test.txt
  5. Automatic merge failed; fix conflicts and then commit the result.

4.编辑test.txt文件,手工解决冲突,vim test.txt

  1. 1.在出现分支之前编辑的信息
  2. <<<<<<< HEAD
  3. 2.master主分支继续开发编辑的信息
  4. =======
  5. 2.修改bug编辑的信息
  6. >>>>>>> bugFix
  1. 1.在出现分支之前编辑的信息
  2. 2.修改bug编辑的信息
  3. 3.master主分支继续开发编辑的信息

5.解决完冲突后,使用 git add 命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决。

  1. yaosht@yaosht-PC MINGW64 /d/git/doc (master|MERGING)
  2. $ git add .
  3. yaosht@yaosht-PC MINGW64 /d/git/doc (master|MERGING)
  4. $ git status
  5. On branch master
  6. Your branch is ahead of 'origin/master' by 2 commits.
  7. (use "git push" to publish your local commits)
  8. All conflicts fixed but you are still merging.
  9. (use "git commit" to conclude merge)
  10. Changes to be committed:
  11. modified: test.txt

6.执行git commit 

  1. yaosht@yaosht-PC MINGW64 /d/git/doc (master|MERGING)
  2. $ git commit

会弹出窗口,编辑合并分支的提交信息,我们可以在里面进行编辑 ,编辑完之后保存退出,git会自动进行提交

7.执行git status查看状态,如下图

我们通过git log --graph查看分支图

拓展

Git-分支-分支的新建与合并 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/688606
推荐阅读
相关标签
  

闽ICP备14008679号