当我试图将我的代码推送到GitHub时,我遇到了一些问题。

Pushing to git@github.com:519ebayproject/519ebayproject.git
To git@github.com:519ebayproject/519ebayproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我还没有在存储库中推入任何东西,那么为什么我需要拉出一些东西呢?


当前回答

这通常发生在git提交并尝试在git拉到其他人已经做了更改的分支x之前进行git推送更改时。

正常的流程如下:

步骤1:git将本地未提交的更改保存在该分支上。

步骤2:git拉origin branch_name -v来拉并合并到本地提交的分支上的更改(给这个合并一些消息,如果有的话修复冲突)。

步骤3:git隐藏弹出隐藏的更改(然后你可以在弹出的文件上提交,如果你想要,或者先推送已经提交的更改(STEP4),然后再将新的提交到文件中。)

步骤4:git推送origin branch_name -v合并后的更改。

将branch_name替换为master(用于主分支)。

其他回答

有些人可能会遇到这个错误,因为Git不知道您要推哪个分支。

如果您的错误消息还包括

error: failed to push some refs to 'git@github.com:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.

那么你可能想要遵循Jim Kubicek的提示,将Git配置为只推送当前分支,将默认分支设置为当前分支。

git config --global push.default current
git pull origin branch_name --rebase

这对我来说是可行的——命令git pull origin branch_name——rebase将首先从远程branch_name中提取更改,然后在其顶部重新设置当前分支。

另一个解决方案是,如果可以的话,通过再次提交来推进远程的头部。在你把这个高级的头拉到局部子树之后,你将能够再次从它推入。

此问题通常是由创建自述文件引起的。Md文件,被算作一个提交,在系统上不是本地同步的,并且缺少后面的头,因此,它显示一个git拉请求。您可以尝试避免自述文件,然后尝试提交。这对我来说是有效的。

另一种选择:在本地将分支重命名为新的名称。

然后,您将能够将其推送到远程存储库,例如,如果这是您保持副本(备份)并确保没有丢失任何东西的方法。

您可以获取远程分支以获得本地副本,并检查(i)远程所拥有的(使用旧的分支名称)和(ii)您所拥有的(使用新分支名称)之间的差异,并决定要做什么。由于您一开始就没有意识到远程的差异(因此出现了问题),因此简单地合并或强制在某个地方进行更改就太残酷了。

查看差异,选择您想要处理的分支,从其他分支中选择您想要的更改,或者恢复您不想要的分支上的更改,等等。

然后,您应该能够决定是否要将干净的版本强制到远程服务器上,或者添加新的更改,或者其他什么。