赞
踩
git-merge - 用于将两个或两个以上的开发历史加入(合并)一起
- #形式一
- git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
- [--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
- [--[no-]allow-unrelated-histories]
- [--[no-]rerere-autoupdate] [-m <msg>] [-F <file>] [<commit>…]
- #形式二
- git merge (--continue | --abort | --quit)
【形式一】
将命名提交中的更改(自其历史记录与当前分支分开以来的时间)合并到当前分支中。
git pull 命令也是使用此命令来合并另一个存储库中的更改,并且可以手动使用它来将一个分支中的更改合并到另一个分支中。
假设存在以下历史记录,并且当前分支为“ master”:
- A---B---C topic
- /
- D---E---F---G master
然后,“git merge topic
”将在topic
分支上所做的更改重放在master
之上,因为它与master在commit E岔开,直到其当前commit C,并将结果记录在新提交中,并带有名称 两个父提交和一个来自用户描述更改的日志消息。
- A---B---C topic
- / \
- D---E---F---G---H master
【形式二】
第二种语法(“git merge --abort
”)只能在合并导致冲突后运行。
git merge --abort 将中止合并过程并尝试重建合并前状态。 但是,如果合并开始时有未提交的更改(特别是在合并开始后进一步修改了这些更改),则git merge --abort 在某些情况下将无法重建原始(合并前)更改。因此,
警告:不建议对重要的未提交的更改进行git merge:可能的话,它可能使你处于在发生冲突的情况下很难退出的状态。
第三种语法("git merge --continue
")只能在合并导致冲突后运行。
--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
合并分支fixes
和enhancements
在当前分支的顶部,使它们合并:
$ 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.在出现分支之前编辑的信息
- 2.修改bug编辑的信息
2.2在master分支上,编辑test.txt文件内容
- 1.在出现分支之前编辑的信息
- 2.master主分支继续开发编辑的信息
3.切换到master分支git checkout master,并合并bugFix分支
- yaosht@yaosht-PC MINGW64 /d/git/doc (master)
- $ git merge bugFix
- Auto-merging test.txt
- CONFLICT (content): Merge conflict in test.txt
- Automatic merge failed; fix conflicts and then commit the result.
4.编辑test.txt文件,手工解决冲突,vim test.txt
- 1.在出现分支之前编辑的信息
- <<<<<<< HEAD
- 2.master主分支继续开发编辑的信息
- =======
- 2.修改bug编辑的信息
- >>>>>>> bugFix
- 1.在出现分支之前编辑的信息
- 2.修改bug编辑的信息
- 3.master主分支继续开发编辑的信息
5.解决完冲突后,使用 git add 命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决。
- yaosht@yaosht-PC MINGW64 /d/git/doc (master|MERGING)
- $ git add .
-
- yaosht@yaosht-PC MINGW64 /d/git/doc (master|MERGING)
- $ git status
- On branch master
- Your branch is ahead of 'origin/master' by 2 commits.
- (use "git push" to publish your local commits)
-
- All conflicts fixed but you are still merging.
- (use "git commit" to conclude merge)
-
- Changes to be committed:
- modified: test.txt
6.执行git commit
- yaosht@yaosht-PC MINGW64 /d/git/doc (master|MERGING)
- $ git commit
会弹出窗口,编辑合并分支的提交信息,我们可以在里面进行编辑 ,编辑完之后保存退出,git会自动进行提交
7.执行git status查看状态,如下图
我们通过git log --graph查看分支图
拓展
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。