在冲突中,GitHub for Windows让我处于“变基”状态,如何从那里开始?

时间:2013-03-01 03:24:37

标签: git git-rebase github-for-windows

我最近开始使用GitHub for Windows

我刚刚发生了冲突。在命令行上我会知道如何处理这个,但是GitHub for Windows选择让我处于一个我不熟悉的状态:

C:\Users\w\Documents\GitHub\CmisSync [(6026d18...)|REBASE +0 ~1 -0 !1 | +0 ~0 -0 !1]> git status
# Not currently on any branch.
# You are currently rebasing.
#   (fix conflicts and then run "git rebase --continue")
#   (use "git rebase --skip" to skip this patch)
#   (use "git rebase --abort" to check out the original branch)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
...

我修复了冲突,提交了文件,但是当我运行git push时,我被告知:

fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD) state now, use

    git push origin HEAD:<name-of-remote-branch>

将合并提交提交给远程主控的推荐方法是什么? 我怀疑git push origin HEAD:master会实现这一点。

2 个答案:

答案 0 :(得分:18)

正如我们在Simon Boudrias所说的那样,如果你真的不知道你在rebase期间做了什么,那么最好从git rebase --abort开始。正如动词所说,它会中止当前的rebase,并使您的存储库和工作副本处于与rebase开始之前相同的状态。

在那之后,你应该做任何你已经做过的开始变装过程的事情(我不认为你说的是​​什么,但不要认为它真的很重要)。当然,rebase将重新开始,这是你原来的问题开始得到回答的地方。

正如状态输出所示,您似乎有冲突。您应该解决它们(我通常使用git status --shortgit mergetool来解决meld),然后git add文件。当状态正常时(例如,添加了必须提交的每个文件,没有冲突),您应该git rebase --continue而不是git commit

这个想法是git rebase在给定的提交之上应用一组提交。我真的不知道哪些提交被应用于什么,但重要的是要考虑到这一点。请记住,可能会出现多个冲突,因为提交会逐个应用。使用git log查看最后一次提交的内容是什么,我认为.git/目录中必须有一个文件,其中包含当前正在应用的提交的提交消息。

这是一个常见的新手错误(我们都在那里:))试图在冲突解决期间包含文件中的更改,而不知道(或遗忘)它们将被后一个提交应用。

所以,希望在解决一些冲突,添加文件并git rebase --continue之后,你应该到达一个快乐的功能库,然后你就可以从那里git push。< / p>

最后,但并非最不重要:在所有rebase内容之后,使用git log检查您是否未修改任何公共提交。比如说,你的新分支包含远程的HEAD提交。重新定位是强大而且非常危险的。你不想改变公开提交 - 这可能是你不想面对的唯一痛苦:)

答案 1 :(得分:1)

首先解决冲突后,首先需要致电rebase来结束git rebase --continue模式。然后,这应该让你回到你拉的分支(在你的案例大师)。您会注意到当命令行(posh-git插件)指示master而不是REBASE

时会发生这种情况

然后你可以使用git push origin master推送。额外的参数可以由Git自动填充,但这取决于您的设置。