当我试图将我的代码推送到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 pull origin master。

我假设您正在使用origin作为遥控器的名称。

你需要先拉后推,在你推送一些东西之前让你的本地存储库更新(以防其他人已经在github.com上更新了代码)。这有助于在局部解决冲突。


正如这条信息告诉你的,

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

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

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

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

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

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

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

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


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

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

有些人可能会遇到这个错误,因为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 diff的区别),并且想要强制推送,请使用push命令和-f

git push -f origin <branch>

原点是远程回购的名称。

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


您的分支名称是否与远程分支名称相同?

如果没有,您应该签出一个与远程分支同名的新分支,并尝试再次推送它。

假设要推送的远程分支是[testing],本地分支名为[test]。

如果你不在测试分支,首先切换到它。

git checkout test

然后打开一个新的分支并命名为testing。

git checkout -b testing

现在,是时候推它了:

git push [remote repo] testing

我在我的教程《如何使用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拉到其他人已经做了更改的分支x之前进行git推送更改时。

正常的流程如下:

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

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

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

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

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


有时我们忘记了牵引,在当地环境中做了很多工作。

如果有人想只推不拉,

git push --force

是有效的。当你和其他人一起工作时,不建议这样做,但当你的工作是一件简单的事情或一个私人玩具项目时,这将是一个快速的解决方案。


在我的情况下,我检查了“mybranch”,并做了git pull,所以我不知道为什么推不起作用。最后,我意识到我推错了树枝。我输入的是git push origin master而不是git push origin mybranch。

如果你已经做了git pull,仍然收到这个消息,确保你推的是正确的分支。


我遇到了同样的问题,结果是我在一个不同的(本地)分支上,而不是我认为的,正确的本地分支在远程提交时落后了。

我的解决方案:签出正确的分支,从其他本地分支中选择提交,git拉和git推


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


当我试图推我当前的分支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进行清理


如果您确定没有人对您的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)

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


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

在我当地的'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>

希望能有所帮助。


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

场景,

我成功地将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**


造成这个问题的另一个原因(显然不太常见)是……

当我进行推送时,我的服务器延迟了大约12个小时

我在服务器上配置了NTP同步我的时钟。

我执行了一个新的git推送,导致了这篇文章中讨论的错误。


Git push -f origin branchname

只有当您确定不需要远程分支代码时,才使用上述命令,否则请先合并,然后再推送代码


您的分支应该在注意到最新合并的更改时立即包含它们,但是您还没有提取最新的更改。

git fetch 

也许这就是所需要的。如果这不起作用,那么你可能需要:

git pull <sharedRepo> <branch> --rebase

如果您没有任何合并冲突,您应该能够成功地推动您的更改。

git push <forkedRepo> <branch>

如果您遇到合并冲突,您无法在GitHub中远程解决。您必须在本地解决它们,然后使用强制标签推动解决方案,因为合并冲突解决方案将更改历史记录。

git push <forkedRepo> <branch> -f

如果git pull print Already - up- up,那么你可能想检查全局git push.default参数(In ~/.gitconfig)。如果匹配,则将其设置为simple。下面的答案解释了原因:

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

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


git pull origin branch_name --rebase

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


使用git拉https://github.com/username/repository 这是因为Github和远程存储库不同步。如果你拉了repo,然后Push,一切都会同步,错误就会消失。

`


我遇到了同样的问题,我所做的是我首先用这个力推它

git push --force

我这样做后,我提交了文件,并得到了一个错误。它确实提交了所有文件并推送了它们。 然后当我第二次推送到github时,我按照它的要求做了,然后就没问题了。希望这对你也有用:)


使用push命令的问题是本地和远程存储库不匹配。如果你在从git hub创建新的存储库时默认初始化了自述库,那么主分支会自动创建。然而,当你试图推动,没有任何分支。你不能推…因此,最好的做法是创建没有默认自述me初始化的repo。


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

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

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

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

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


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


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

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

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

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

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

Git存储(保存当前更改)

Git pull(从远程获取更改)

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

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

Git commit -m commit msg

git push