如何用git重新绑定两个分支?

时间:2016-11-17 06:20:26

标签: git

我正在尝试将master重新设置为dev:

git rebase master

然后我得到:当前分支是最新的。

然而,当我检查两个分支之间的差异时,我会发生冲突。为什么git没有说出检测到冲突之类的东西?

另请参阅此处了解代码sample

2 个答案:

答案 0 :(得分:0)

如果您的目的是将分支 dev 合并到 master 中,从而只显示带有单个注释的一次提交,则需要添加--interactive选项。
因此,您从 dev 分支运行的命令变为:

git rebase master --interactive

通过这种方式,您可以压缩要隐藏的提交。

例如,当您找回此代码时:

pick 01d1124 Adding the book add function
pick 6340aaa Creating the unit test for book add function
pick ebfd367 Now the function is finished
# Rebase 60709da..30e0ccb onto 60709da
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

您可以这样修改代码:

pick 01d1124 Adding the book delete function
squash 6340aaa Creating the unit test for book add function
squash ebfd367 Now the function is finished

然后,在要隐藏的所有注释之前加上#号。

# This is a combination of 4 commits.
# The first commit's message is:
Adding the book delete function
# This is the 2nd commit message:
# Creating the unit test for book add function
# This is the 3rd commit message:
# Now the function is finished
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming --only paths...
# Not currently on any branch.

然后您结帐 master ,然后

git merge dev

通过这种方式,您只需一次提交即可将分支开发合并到master中。


为什么会收到“当前分支是最新的”消息。

您使用git rebase想要在 dev 之后立即使用分支 master 上已完成的提交更新分支 dev 。 >已从master实例化。
在分支* dev **上时,您将执行以下操作:

git rebase master

如果那之后您没有对master执行任何新的提交,则会收到以下消息:
“当前分支是最新的。”

这是因为在较低级别上,rebase实际要做的是一个接一个地抽取在master分支上完成的新提交,并将它们重新附加到dev的最后一次提交。

因此,如果您不压缩任何提交,则该命令将无用。

我发现本文包含的图像对于理解该机制非常有用: https://hackernoon.com/git-merge-vs-rebase-whats-the-diff-76413c117333

答案 1 :(得分:-1)

我无法对您的问题发表评论,因此这可能无法回答您的所有问题。

1)您的rebase命令按预期工作。你在一个dev分支上,它在master之上有一个提交。它已经是最新的,没有什么可以在那里重新定位。

2)不太确定你的意思是说你看到两个分支之间的冲突。但是,我假设您可能希望将更改从dev部署到master分支。如果是,请执行以下步骤:

git checkout master       // Switch the current branch to master
git merge dev             // Merge the dev branch to master (it will be just fast-forward)
git push origin master    // Push to origin

现在master和dev分支应该保持同一个提交。