我刚开始使用 Git,发现它很棒,但是我有点困惑什么是“合并”命令。
假设我们在分支“A”中有一个正在进行的项目。
我回家后对这个分支进行更改,并将其保存为“B”。 另一个程序员对“A”进行更改,并将其保存为“C”。
是否有一种方法将两个分支“B”和“C”合并在一起,然后将更改作为新分支提交,例如“D”?
还是我误解了“合并”的意义?
我刚开始使用 Git,发现它很棒,但是我有点困惑什么是“合并”命令。
假设我们在分支“A”中有一个正在进行的项目。
我回家后对这个分支进行更改,并将其保存为“B”。 另一个程序员对“A”进行更改,并将其保存为“C”。
是否有一种方法将两个分支“B”和“C”合并在一起,然后将更改作为新分支提交,例如“D”?
还是我误解了“合并”的意义?
merge
用于将两个(或多个)分支合并在一起。
下面是一个小例子:
$ # on branch A:
$ # create new branch B
$ git checkout -b B
$ # hack hack
$ git commit -am "commit on branch B"
$ # create new branch C from A
$ git checkout -b C A
$ # hack hack
$ git commit -am "commit on branch C"
$ # go back to branch A
$ git checkout A
$ # hack hack
$ git commit -am "commit on branch A"
现在有三个分支(即A、B和C),每个分支都有不同的头部。
要将B和C中的更改合并回A,首先切换到A(本例已完成此操作),然后使用合并命令:
$ # create an octopus merge
$ git merge B C
你的历史记录将会看起来像这样:
…-o-o-x-------A
|\ /|
| B---/ |
\ /
C---/
如果您想跨存储库/计算机合并代码,请查看git pull
命令,例如从具有A分支的PC开始(此示例将创建两个新的提交):
$ # pull branch B
$ git pull ssh://host/… B
$ # pull branch C
$ git pull ssh://host/… C
git add conflicting_files
然后 git commit
。 - knittl如果你想要将 SubBranch 的更改合并到 MainBranch 中:
git checkout MainBranch
git merge SubBranch
案例:如果您需要忽略默认创建的合并提交,则请按照以下步骤操作。
假设从主分支检出了一个新的功能分支,已经有两个提交:
检出一个新的 feature_branch
然后功能分支添加了两个提交-->
现在,如果您想要将feature_branch的更改合并到master中,请在master上执行git merge feature_branch
。
这将添加所有提交到主分支中(4个主分支+2个feature_branch =总共6个)+额外的合并提交,例如'Merge branch 'feature_branch''
作为主分支已分离。
如果您真的需要忽略此合并提交,并添加一个新提交,例如'Integrated feature branch changes into master'
,请运行git merge feature_merge --no-commit
。
使用--no-commit,它执行合并并在创建合并提交之前停止,现在我们将在主分支中获得feature分支中添加的所有更改,并有机会创建自己的新合并提交。
编辑2023:现在,在较新版本的git中,您可以选择交互式更改合并提交,而无需指定--no-commit选项。
将您的子分支更改为主分支
git branch -m main <BRANCH>;
git fetch origin;
git branch -u origin/<BRANCH> <BRANCH>;
git remote set-head origin -a