无法推送到GitHub - 一直说需要合并

use*_*717 727 git

我是GitHub的新手.今天我在尝试将代码推送到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.
Run Code Online (Sandbox Code Playgroud)

我还没有在存储库中推送任何东西,为什么我需要拉东西呢?

Nic*_*ndo 753

这可能导致远程存储库丢失提交; 小心使用它.

如果您不希望将远程分支合并到本地分支(请参阅与git diff的差异),并且想要强制推送,请使用带有-fpush命令

git push -f origin <branch>
Run Code Online (Sandbox Code Playgroud)

origin你的远程仓库的名称在哪里.

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

  • 请务必阅读本文评论的最后一行!"这可能导致远程存储库丢失提交;请小心使用它." 强行推进团队环境是一件危险的事情,通常应该避免. (24认同)

Jak*_*ene 238

正如消息告诉你的那样,

合并远程更改(例如'git pull')

使用git pull拉从远程资源库的最新变化,以本地资源库.在这种情况下,拉动更改将需要合并,因为您已对本地存储库进行了更改.

我将提供一个示例和图片来解释.让我们假设您从origin/branch的最后一次拉动是在Commit B.您已完成并提交了一些工作(Commit C).与此同时,其他人已经完成了他们的工作,并将其推送到原点/分支(提交D).这两个分支之间需要合并.

local branch:                         --- Commit C 
                                    /
                                   /
                                  /
origin/branch: Commit A ------ Commit B ---- Commit D
Run Code Online (Sandbox Code Playgroud)

因为你是想要推送的人,Git会强制你执行合并.为此,您必须首先从origin/branch中提取更改.

local branch:                         --- Commit C -- Commit E
                                    /               /           
                                   /               /             
                                  /               /               
origin/branch: Commit A ------ Commit B ---- Commit D 
Run Code Online (Sandbox Code Playgroud)

完成合并后,您现在可以通过推送更改将原点/分支快进到提交E.

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

  • 如果你不想合并怎么办?然后将D作为支路(至少目前为止).后来,我可能会在C之后承诺更多; 在D之后,其他人可能会提交更多内容.急于合并的是什么?如何在不合并的情况下推动侧枝?~~~ (7认同)
  • *一些*年后,似乎这个答案与[这个]非常相似(http://stackoverflow.com/a/12651066/540776) (4认同)
  • local/branch和origin/branch意味着代表相同的分支但在不同的机器上(本地与原始); 推送本地/分支是更新origin/branch.如果你希望你的分支的状态对其他人可见(即在原点上),但你不想与origin/branch合并,那么你应该从local/branch(git branch [name])创建一个新分支,将该分支推送到原点(git push -u origin [name]) (3认同)

AYK*_*AYK 198

你在推送之前更新了代码吗?

git pull origin master在推动任何东西之前使用.

我假设您使用的origin是遥控器的名称.

您需要在推送之前拉动,以便在推送内容之前使本地存储库保持最新(以防万一其他人已经更新了代码github.com).这有助于在本地解决冲突.

  • `git pull origin master`显示**已经是最新的.**但是当试图推动origin_branch时,这就说出了相同的警告.任何建议!! (14认同)
  • '起源'是遥远的.您可以使用`git remote --verbose`查看git文件夹下配置的所有遥控器.屏幕上显示的信息还将包含"git@github.com"路径或HTTPS路径,您应该可以从中识别推送位置.希望这可以帮助 ! (3认同)
  • @OriginalAlchemist是的...因为我只是开发人员在远程本地分支上工作...所以我强制推送本地分支..并且使用本地系统的更改覆盖服务器上的open分支的所有更改.`git push -f <remote> <branch>`例如**git push origin <your_local_branch>**查看[thread](http://stackoverflow.com/a/10510482/2624806). (3认同)
  • @Shubh你有没有解决过这个问题?我得到同样的东西! (2认同)

pra*_*upd 122

这通常发生在您git commit尝试在该分支上进行git push更改之前,其他人已经进行了更改.git pullingx

正常流量如下,

第1git stash步:您在该分支上的本地未提交更改.

第2步:git pull origin branch_name -vpull and merge到对分支机构本地提交的更改(给这个合并一些消息,如果任何解决冲突.)

STEP 3:git stash popstash编的变化(然后,你可以,如果你想做出弹出的文件提交或已经推动提交的修改(STEP4)首先做出新的承诺文件后.)

第4步:git push origin branch_name -v合并的更改.

替换branch_namemaster(用于master分支).

  • `commit`在哪里?你应该在"stash pop"之后提交你的更改吗? (3认同)

Smi*_*tel 50

首先是简单的解决方案

  • 试试这个命令git push -f origin master.
  • 此命令将强制执行存储库所需的所有更改.

推荐解决方案

  • .git从文件夹中删除目录.
  • 然后执行以下命令:

    git pull --allow-unrelated-histories  //this might give you error but nothing to worry, next cmd will fix it
    git add *
    git commit -m "commit message"
    git push
    
    Run Code Online (Sandbox Code Playgroud)

要么

git init
git add .
git commit -m "First Commit"
git remote add origin [url]
git push -u origin master
Run Code Online (Sandbox Code Playgroud)

只有git push -f origin master-u不适合你的情况下使用.

这将解决推送文件时发生的几乎任何类型的错误.

  • 删除git repo并丢失整个提交历史记录是“推荐”的解决方案吗?似乎草率。 (4认同)

小智 47

有时我们忘了拉动并在当地环境中做了很多工作.

如果有人想要不拉,

git push --force
Run Code Online (Sandbox Code Playgroud)

工作中.与其他人合作时不建议这样做,但当您的工作很简单或个人玩具项目时,这将是一个快速的解决方案.

  • 这对我有用:与其他0个合作者的私人项目。我在SO上尝试了其他一些建议的“解决方案”,但都没有解决一个非常简单的问题:我对较旧的提交执行了本地“重置-硬”操作,然后又做了一些。然后我只想“推”,但是远程仓库没有准备好让我。WarrenP实际上可以通过减少较弱的语气来帮助git学习者。也许他不想。 (2认同)
  • 要么不使用它,要么学会正确使用它.如果强制推送到团队共享的重要中央存储库,则应该失去对所有重要存储库的所有推送访问权限.您在自己的个人回购中所做的事情,以避免学习其他方法,最终会影响您在共享回购中工作的能力.如果你知道在推力之前发生了什么,有时推力是可以的.如果你不这样做,那就永远不行了. (2认同)

xia*_*ica 35

有些人可能会收到此错误,因为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.
Run Code Online (Sandbox Code Playgroud)

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

git config --global push.default current
Run Code Online (Sandbox Code Playgroud)


小智 31

git pull origin branch_name --rebase
Run Code Online (Sandbox Code Playgroud)

这对我git pull origin branch_name --rebase有用- 命令将首先从远程branch_name拉取更改,然后rebase在其顶部拉出当前分支.


Bha*_*hur 19

除了上面的答案,以下内容对我有用: -

场景 -

  1. 我成功地将my_branch推到了原点.
  2. 我做了一些更改.
  3. 当我再次尝试推送时(在添加,当然提交之后),我得到了上面提到的错误.

方案 -

 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**
Run Code Online (Sandbox Code Playgroud)

证明


小智 19

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

git push --force
Run Code Online (Sandbox Code Playgroud)

在我提交文件之后我做了这个,并且你得到了一个错误.它确实提交了所有文件并推送它们.然后下次我推到github.我按照它的要求做了,然后就没事了.希望这也适合你:)

  • `git push --set-upstream origin master --force` (3认同)

Tho*_*7vt 12

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

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

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

git push https://github.com/thomas07vt/MyFirstRepo.git master
Run Code Online (Sandbox Code Playgroud)


小智 6

当我尝试推送当前分支时,我收到上述错误消息foobar:

git checkout foobar
git push origin foo
Run Code Online (Sandbox Code Playgroud)

事实证明我有两个本地分支跟踪同一个远程分支:

foo -> origin/foo (some old branch)
foobar -> origin/foo (my current working branch)
Run Code Online (Sandbox Code Playgroud)

通过使用以下方法,我可以推送当前的分支:

git push origin foobar:foo
Run Code Online (Sandbox Code Playgroud)

...并清理 git branch -d


VIK*_*HLI 6

git push -f origin branchname

仅当您确定不需要远程分支代码时才使用上述命令,否则先进行合并然后再按下代码

  • 这是一个错误答案的副本. (4认同)

lon*_*gda 5

刚刚遇到了同样的问题,但就我而言,我在遥控器上输入了错误的分支。所以,这似乎是这个问题的另一个来源......仔细检查你正在推送到正确的分支。


Ram*_*ken 5

我遇到了同样的问题,结果我在一个与我想象的不同的(本地)分支上,并且正确的本地分支在远程提交中落后了。

我的解决方案:签出正确的分支,从另一个本地分支、git pull 和 git push 中挑选提交


Com*_* 10 5

我有一个类似的问题,结果是我保持分支最新的工作流程有问题。我正在做以下事情:

在我当地的“主人”

git fetch upstream
git merge upstream/master --ff-only
Run Code Online (Sandbox Code Playgroud)

然后回到我当地的分支机构

git rebase master
Run Code Online (Sandbox Code Playgroud)

这适用于以前的 git 流程,但不适用于 github。的git rebase是这里的问题导致与同步问题(我承认这件事情我已经没有完全理解接受),不幸的是把我在的位置git push -f很可能成为最简单的选择。不好。

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

在我当地的分支机构

git fetch upstream
git merge upstream/master
Run Code Online (Sandbox Code Playgroud)

没有快进,因为我当然会在本地分支中进行更改。

正如您可能会说的,我不是 git 专家,但我被可靠地告知,此工作流程可能会避免我遇到的特定问题。


Sco*_*des 5

如果您不想进入当前项目(并且可能面临合并冲突,您无需解决)并且您不想创建另一个分支(管理另一个分支将会很繁琐),并且您不想我想做任何有风险和永久性的git force命令(即使在阅读了他们所做的事情之后,我也经常对这样做的含义感到惊讶).

解决方法:你可以简单地说,拖动文件夹的内容到另一个文件夹,拉项目进入你现在空文件夹,拖动拉内容的垃圾桶,然后将您的正确的项目回的文件夹.您应该能够正确推动并获得所需的结果.这实际上花了我不到10秒的时间.

对于那些在没有引用任何后果的情况下告诉我这是不恰当的人,或者人们告诉我使用导致我未来烦恼的命令的人,我说:"这种方法花了我不到10秒." 如果我遇到一个执行时间不到10秒且具有完全相同效果的git命令,我将采用它.在那之前,我正在使用这种方法.

此方法的一个缺点是,如果在分支中实际合并而未记录合并,则提交历史记录将显示为线性.在处理组时,这可能不是最好的方法.在那些案件中分支机构工作!