如何解决git错误:"更新被拒绝,因为当前分支的提示落后"

Fin*_*ish 47 git bitbucket git-merge

我最近开始使用Git(之前我使用过subversion,但我现在正在对使用bitbucket和git的项目进行一些协作).

直到今天,我发现一个善意的同事已经推动了对大师的改变,而不是成为一个分支.这意味着当我尝试提交时,我收到错误:

更新被拒绝,因为您当前分支的提示落后

我知道这应该通过提出重新同步的拉取请求来解决,但我不想丢失我在本地做出的更改而且我同样不想强制提交并消除其他人做出的更改.

什么是允许我合并更改而不丢失的正确方法?

Aka*_*wal 72

如果您已经提交了一些提交,则可以执行以下操作

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

这将把所有本地提交置于新拉动的更改之上.

非常小心:这可能会覆盖所有现有文件,因为它们位于远程仓库中的分支头部!如果发生这种情况,你不希望它可以撤消此更改

git rebase --abort 
Run Code Online (Sandbox Code Playgroud)

...自然你必须在做任何新的提交之前做到这一点!

  • 这会删除我的本地更改,使它们像repo中的更改.在我做之前我把项目放到.zip文件夹中是件好事:) (4认同)
  • 为我的经验添加评论。我必须添加`git pull --rebase <remote> <branch>` 然后修复合并冲突。然后是`git add`,最后是`git rebase --continue`。您的本地和远程分支可能有问题需要修复。 (2认同)

Reb*_*iam 19

我会这样做:

  1. 暂存所有未分级的更改.

    git add .
    
    Run Code Online (Sandbox Code Playgroud)
  2. 存储更改.

    git stash save
    
    Run Code Online (Sandbox Code Playgroud)
  3. 与遥控器同步.

    git pull -r
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重新应用本地更改.

    git stash pop
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    git stash apply
    
    Run Code Online (Sandbox Code Playgroud)

  • 这也是**非常危险**!`git pull -r` 意味着你对远程分支的头部所做的任何提交都将被彻底破坏!您的“存储”只会是相对于您上次本地提交的更改!OP 在评论中特别指出“在尝试推送之前,我已经进行了几次本地提交”...... (2认同)

小智 9

我在我的分支上遇到了完全相同的问题(我们称之为分支 B),我按照三个简单的步骤让它工作

  1. 切换到master分支(git checkout master)
  2. 拉了主人(git pull)
  3. 创建了新分支(git 分支 C) - 请注意,我们现在从 master 分支
  4. 现在,当您在分支 C 上时,与分支 B 合并(git merge B)
  5. 现在做一个推送(git push origin C) - 有效:)

现在您可以删除分支 B,然后将分支 C 重命名为分支 B。

希望这可以帮助。


Boh*_*ian 7

这对我有用:

git pull origin $(git branch --show-current)
git push
Run Code Online (Sandbox Code Playgroud)

仅供参考git branch --show-current,返回当前分支的名称。