git merge命令

时间:2018-04-11 15:18:39

标签: git macos vim git-merge

Mac在这里。这里是git的新手。上周我剪切了一个功能分支(从feature/my-feature-1(主线)起名为development,并让我所有的更改都在本地工作。

我现在想要合并任何已提交到development的更改(因为我上周切断了我的功能分支)(包括解决任何合并冲突)然后推送我的可合并功能分支到远程git服务器(GitHub),以便我可以创建没有合并冲突的PR。

所以我做了所有最后的修改:

git add .
git commit -m "Final changes"

然后我切换到development然后拉出来:

git checkout development
git pull

然后我切换回我的功能分支并尝试合并:

git checkout feature/my-feature-1
git merge development

看来vivim在我的终端中打开,我看到以下消息:

Merge branch 'development' into feature/my-feature-1

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

这对我没有意义!我不知道发生了什么事:

  • 是否将development自动合并到我的功能分支中,并且发现没有冲突?
  • 将它自动合并,但发现了冲突,现在由我手动合并/解决它们? (如果是这样,如何查询git以查看这些冲突是什么?)
  • 根本不想尝试合并吗? (如果是这样,为什么不呢?!)

3 个答案:

答案 0 :(得分:2)

所以这里有一些你需要知道的事情

<强>合并

使用自动消息

创建合并提交
Merge branch 'XXX' into YYY

如果需要,您可以更改信息。提交历史记录如下所示

Git merge

<强>衍合

由于您从主分支中删除了feature分支,我们假设您向功能分支F1提交了F2D1D2提交已在开发分支上完成。现在,如果您不想要合并提交,那么您需要对您的分支进行rebase,以便它看起来像是从D2而不是之前的开发头提交中删除的,所以rebase会将您的提交更改为F3F4并且由于您现在将基本提交设为D2,因此您可以进行快进合并。

FF Merge

如果您使用github并创建拉取请求,那么您有几个选项

Git merge option

第一个选项Create a merge commit是您通过命令行执行的操作。基本上它会创建一个新的合并提交

其他选项Squash and merge,这会将所有提交合并到一个提交中,然后将其添加到您要合并到的分支中。这将仅通过1次提交

转发基本分支

Rebase and merge会执行我在rebase中已经解释过的内容。这将根据您在功能分支中提交的次数转发基本分支。

希望这能解释您的疑问,如果没有,请随时发表评论,我会更新答案

答案 1 :(得分:2)

  • 它是否自动将开发合并到我的功能分支中,它只发现没有冲突?

是的,它成功完成了合并并解决了所有可合并的冲突(如果有的话)。在'git merge'命令之后vi打开的事实证明了它。

  • 将它自动合并,但发现了冲突,现在由我手动合并/解决它们? (如果是这样,我如何查询git以查看这些冲突是什么?)

没有发现任何冲突。如果确实如此,如果它本身无法合并,它就不会打开vi,而是给出一条消息“找到冲突。请解决所有冲突并提交”。然后,你必须担心解决冲突和提交。请查看此link以了解如何解决冲突。

  • 根本不想尝试合并吗? (如果是这样,为什么不呢?!)

它确实合并,合并过程只等待您保存并在完成之前退出。作为此特定vi屏幕上的提示,如果要中止合并,或者不确定是否要继续进行任何更改,请删除所有行(:1,$ d),保存并退出。

答案 2 :(得分:0)

这是关于mergin分支的正常信息。您看到的窗口只是关于合并两个分支的注释。

简单地完成合并(seimcolon isn&t; t)是可选的:

&#13;
&#13;
[esc]
:wq
&#13;
&#13;
&#13;

您可以更改编辑器以使用vi / vim并选择nano或其他编辑器。根据您使用的IDE或操作系统,您始终可以使用软件进行合并。

使用rebase代替merge进行开发分支的更改(然后合并更改以从功能开发)是一种很好的做法。