12

我最近开始使用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会实现这一点。

4

2 回答 2

18

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

在那之后,你应该做任何你已经做过的启动 rebase 过程的事情(我不认为你说它是什么,但也不认为它真的很重要)。变基肯定会再次开始,这就是您最初的问题开始得到回答的地方。

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

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

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

因此,希望在解决一些冲突、添加文件并git rebase --continueing 之后,您应该会到达一个快乐的功能存储库,并且您将能够git push从那里开始。

最后但并非最不重要的一点:在所有变基的东西之后,git log用来检查你没有修改任何公共提交。假设您的新分支包含远程的 HEAD 提交。变基功能强大且非常危险。你不想改变公开提交的基础——这可能是你唯一不想面对的 git 痛苦:)

于 2013-03-01T05:19:28.137 回答
1

解决冲突后,您首先需要rebase通过调用来结束模式。git rebase --continue这应该让你回到你正在拉的分支(在你的案例中是主人)。当命令行(posh-git 插件)将指示master而不是REBASE

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

于 2013-03-01T04:46:22.870 回答