当我试图将我的代码推送到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 diff的区别),并且想要强制推送,请使用push命令和-f

git push -f origin <branch>

原点是远程回购的名称。

通常,该命令拒绝更新不是用于覆盖它的本地引用的祖先的远程引用。这个标志禁用检查。这可能导致远程存储库丢失提交;小心使用。

其他回答

此问题通常是由创建自述文件引起的。Md文件,被算作一个提交,在系统上不是本地同步的,并且缺少后面的头,因此,它显示一个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 pull print Already - up- up,那么你可能想检查全局git push.default参数(In ~/.gitconfig)。如果匹配,则将其设置为simple。下面的答案解释了原因:

Git: push.default "matching"和"simple"有什么区别?

此外,使用git remote show origin检查您的本地分支是否过期,并在需要时进行拉取也是值得的

我也遇到过类似的问题,结果是我保持分支保持最新的工作流程出了问题。我正在做以下事情:

在我当地的'master'中

git fetch upstream
git merge upstream/master --ff-only

然后回到我当地的分行

git rebase master

这适用于以前的git流,但不适用于github。git rebase是导致同步问题的问题(我承认这是我不得不接受的,但没有完全理解),不幸的是,git push -f可能是最简单的选择。不好的。

我的新流程是直接使用git merge来更新分支,如下所示:

在我当地的分行

git fetch upstream
git merge upstream/master

没有快进,因为我将在本地分支中做出改变。

正如你可能知道的那样,我不是git专家,但是我被可靠地告知这个工作流可能会避免我遇到的特定问题。

我已经在GIT存储库中解决了这个问题。在这种情况下,不需要重新设置或强制提交。使用以下步骤解决此问题-

local_barnch> git branch --set-upstream to=origin/<local_branch_name> 

local_barnch>git pull origin <local_branch_name>

local_barnch> git branch --set-upstream to=origin/master

local_barnch>git push origin <local_branch_name>

希望能有所帮助。