我最近开始使用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
会实现这一点。
答案 0 :(得分:18)
正如我们在Simon Boudrias所说的那样,如果你真的不知道你在rebase期间做了什么,那么最好从git rebase --abort
开始。正如动词所说,它会中止当前的rebase,并使您的存储库和工作副本处于与rebase开始之前相同的状态。
在那之后,你应该做任何你已经做过的开始变装过程的事情(我不认为你说的是什么,但不要认为它真的很重要)。当然,rebase将重新开始,这是你原来的问题开始得到回答的地方。
正如状态输出所示,您似乎有冲突。您应该解决它们(我通常使用git status --short
加git 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自动填充,但这取决于您的设置。