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

Nic*_*oul 12 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)
...
Run Code Online (Sandbox Code Playgroud)

我修复了冲突,提交了文件,但是当我运行时,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>
Run Code Online (Sandbox Code Playgroud)

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

mga*_*aia 18

正如我们在西蒙·布德里亚斯(Simon Boudrias)所说的那样,如果你真的不知道自己在一次变革中做了什么,那么首先要做的就是用git rebase --abort.正如动词所说,它会中止当前的rebase,并使您的存储库和工作副本处于rebase启动之前的状态.

在那之后,你应该做任何你已经完成的任何开始rebase过程(我不认为你说它是什么,但不认为它是非常重要的).当然,rebase将重新开始,这是你原来的问题开始得到回答的地方.

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

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

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

所以,希望在解决一些冲突,添加文件和git rebase --continue它们之后,你应该到达一个快乐的功能库,你将能够git push从那里开始.

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