当我试图将我的代码推送到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.

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


当前回答

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

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

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

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

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

其他回答

有些人可能会遇到这个错误,因为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

除了上面的答案,下面的答案对我很有用:-

场景,

我成功地将my_branch推到origin。 我又做了一些改动。 当我尝试再次推,(在做了添加,当然提交),我得到了上面提到的错误。

解决方案-

 1. git checkout **my_branch**
 2. git add, commit your changes.
 3. git pull origin **my_branch** (not origin, master, or develop)
 4. git push origin **my_branch**

您将无法将更改推送到远程分支,除非您取消阶段性文件,然后保存本地更改,并应用来自远程的pull,然后您可以将更改推送到远程。

步骤如下—> .单击“确定”

git重置-soft HEAD~1(获取阶段性文件)

Git状态(检查暂存的文件)

Git恢复—分段<文件..>(恢复分级)

Git存储(保存当前更改)

Git pull(从远程获取更改)

Git stash apply(应用本地更改,以便添加和提交)

Git add <files…>(添加本地文件提交)

Git commit -m commit msg

git push

当我将最新的更改推到我用于gitweb的裸Git存储库时,我得到了类似的错误。在我的例子中,我没有在裸库中做任何更改,所以我只是删除了我的裸库并再次克隆:

git clone --bare <source repo path> <target bare repo path>

当我试图推我当前的分支foobar时,我得到了上面提到的错误消息:

git checkout foobar
git push origin foo

结果是我有两个本地分支跟踪同一个远程分支:

foo -> origin/foo (some old branch)
foobar -> origin/foo (my current working branch)

它为我工作,通过使用我的当前分支:

git push origin foobar:foo

... 并使用git分支-d进行清理