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

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


当前回答

我在我的教程《如何使用GitHub:初学者教程》中提到了这一点。

当你在GitHub上创建一个新的存储库时,GitHub可能会要求你创建一个自述文件。如果你直接在GitHub上创建自述文件,那么你需要首先在“推送”请求成功之前发出“拉”请求。 这些命令将“拉”远程存储库,将其与当前文件合并,然后将所有文件“推”回GitHub:

git pull https://github.com/thomas07vt/MyFirstRepo.git master

git push https://github.com/thomas07vt/MyFirstRepo.git master

其他回答

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

正如这条信息告诉你的,

合并远程更改(例如:git拉)

使用git pull将最新的更改从远程存储库拉到本地存储库。在这种情况下,提取更改将需要合并,因为您已经对本地存储库进行了更改。

我将提供一个例子和一张图片来解释。让我们假设你最后一次从原点/分支抽取是在提交b。你已经完成并提交了一些工作(提交C)。与此同时,其他人已经完成了他们的工作,并将其推到原点/分支(提交D)。这两个分支之间将需要合并。

——提交C / / / origin/branch:提交A ------提交B ----提交D

因为您是想要推送的人,Git会强制您执行合并。为此,您必须首先从原点/分支获取更改。

本地分支:——提交C——提交E / / / / / / origin/branch:提交A ------提交B ----提交D

在完成合并之后,您现在可以通过推送您的更改将原点/分支快进到Commit E。

Git要求您自己处理合并,因为合并可能会导致冲突。

如果您确定没有人对您的git存储库进行更改,并且您正在使用最新版本,那么git pull作为解决方案在您心中并没有意义……

然后可能发生了这样的事情,你使用git commit -amend

它允许您将阶段性更改与前一次提交结合起来,而不是将其作为一个全新的快照提交。它还可以用于简单地编辑前一个提交消息,而不更改其快照。

ATLASSIAN教程:重写历史

然而,如果你已经将提交推到GitHub,不建议执行git commit -amend,这是因为“修改不仅会改变最近的提交,它会完全替换它。”对Git来说,它看起来像一个全新的提交”,这意味着对你GitHub上的其他开发人员来说,历史看起来像a ->B->C,但对你来说,它看起来像a ->B->D,如果GitHub让你推送,其他人都必须手动修复他们的历史

这就是为什么您会得到错误消息的原因!master -> master(非快进),如果你知道没有人拉出你的最新更改,你可以使用git push -force,这将改变你的公共回购中的git历史记录。否则……你可以执行git pull,但我相信这将有相同的结果,因为你没有经过git commit -amend,它将创建一个新的提交(即:git pull后的git历史:a ->B->C->D)

有关更多详细信息:如何更改最新提交

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

正常的流程如下:

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

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

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

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

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

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