git 合并命令后的信息消息不明确

Ambiguous info message after git merge command

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

我现在想在本地合并已提交给 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.

这对我来说毫无意义!我不知道发生了什么:

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

合并

创建合并提交,带有自动消息

Merge branch 'XXX' into YYY

并且您可以根据需要更改消息。提交历史如下所示

变基

由于您从 master 分支中删除了 feature 分支,假设您提交了 F1F2 到功能分支和 D1D2 提交是在开发分支上完成的。现在如果你不想合并提交,那么你需要重新设置你的分支,这样它看起来就像是从 D2 中删除的而不是以前的开发负责人提交,做重新设置会将你的提交更改为 F3, F4 并且由于您现在将基础提交设为 D2,您可以进行快进合并。

如果您使用 github 并创建拉取请求,那么您的选择很少

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

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

转发基本分支

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

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

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

要完成合并,只需执行以下操作(分号不是可选的):

[esc]
:wq

您可以将编辑器更改为不使用 vi/vim 并选择 nano 或其他编辑器。您可以随时使用软件进行合并,具体取决于您使用的 IDE 或 OS。

最好使用变基而不是合并来处理开发分支上的更改(然后合并更改以从功能开发)。

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

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

  • 它会自动合并它可以自动合并的内容,但发现了冲突,现在由我手动 merge/resolve 它们了吗? (如果是这样,我如何查询 git 以查看这些冲突是什么?)

没有发现任何冲突。如果它这样做了并且如果它不能自己合并它们,它就不会打开 vi,而是给出类似 "Conflicts found. Please resolve all conflicts and commit" 的消息。届时您将不得不担心解决冲突和提交问题。检查此 link 以了解如何解决冲突。

  • 难道它根本就没有尝试进行任何合并吗? (如果是,为什么不呢?!)

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