我最近开始使用GitHub for Windows。
我刚遇到了一个冲突。在命令行上,我知道如何处理这个问题,但GitHub选择将我置于一种我不熟悉的状态:
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能否做到这一点。
发布于 2013-03-01 13:19:28
正如我们在Simon Boudrias中所说的,如果你不知道你在rebase期间做了什么,最好的开始就是使用git rebase --abort。正如动词所说,它中止当前的rebase,并使您的存储库和工作副本处于与rebase开始之前相同的状态。
在那之后,你应该做你所做的任何事情,启动了rebase过程(我不认为你说了它是什么,但也不认为它真的很重要)。当然,rebase还会重新开始,这就是你最初的问题开始得到回答的地方。
正如状态输出所说,您似乎有冲突。您应该解析它们(我通常使用git status --short和git mergetool来使用meld解析它们),然后git add文件。当状态为OK (也就是说,每个必须提交的文件都已添加,没有冲突)时,您应该使用git rebase --continue而不是git commit。
其思想是git rebase在给定的提交之上应用一组提交。我真的不知道在什么之上应用了什么提交,但记住这一点是很重要的。请记住,可能会显示多个冲突,因为提交是一个接一个地应用。使用git log查看上一次应用的提交,我认为在您的.git/目录中必须有一个包含当前正在应用的提交的提交消息的文件。
在冲突解决期间尝试在文件中包含更改,而不知道(或忘记)这些更改将被后续提交应用,这是一个常见的新手错误(我们都有过这样的经历:)。
因此,希望在解决一些冲突、添加文件并对其进行git rebase --continue之后,您应该会到达一个令人满意的功能存储库,并且您将能够从那里开始git push。
最后,但并非最不重要的一点是:在完成所有的rebase工作之后,使用git log检查您没有修改任何公共提交。假设您的新分支包含远程的HEAD commit。Rebasing是强大的,也是非常危险的。你不想改变一个公共提交的基址--这可能是你唯一不想面对的痛苦:)
发布于 2013-03-01 12:46:23
一旦解决了冲突,首先需要通过调用git rebase --continue来结束rebase模式。这应该会让你回到你所拉的那个分支上(在你的情况下是master)。您会注意到,当命令行(posh-git plugin)指示master而不是REBASE时,就会发生这种情况
然后,您可以使用git push origin master进行推送。额外的参数可能会由Git自动填充,但这将取决于您的设置。
https://stackoverflow.com/questions/15149953
复制相似问题