ChatGPT解决这个技术问题 Extra ChatGPT

如何解决 git 错误:“更新被拒绝,因为您当前分支的尖端落后”

一位好心的同事将更改推送到 Master,而不是创建分支。这意味着当我尝试提交时,我得到了错误:

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

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

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

git stash 您的更改(如果未提交),与远程同步,使用 git stash pop 重新应用更改
不幸的是,在尝试推送并意识到问题之前,我已经进行了几次本地提交。我应该如何处理这些?
如果您遇到此错误,请执行 heroku,然后执行 stackoverflow.com/a/21088381/12201407

m
mike rodent

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

git pull --rebase

这会将您所有的本地提交置于新拉取的更改之上。

对此要非常小心:这可能会用文件覆盖您当前的所有文件,因为它们位于远程存储库中分支的头部!如果发生这种情况并且您不希望它发生,您可以使用 UNDO THIS CHANGE

git rebase --abort 

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


这是我需要的,但存储方法也很有用,所以我也投票赞成 Tim Castelijns 的评论。
这会删除我的本地更改并使它们与 repo 中的一样。好在我在做之前把我的项目放到了一个 .zip 文件夹中:)
为我的经验添加评论。我必须添加 git pull --rebase <remote> <branch>,然后修复合并冲突。然后是 git add,最后是 git rebase --continue。您的本地和远程分支可能有问题需要修复。
在执行 git pull --rebase origin master 之后,它说 Current branch my_branch 是最新的。我很高兴。但是当我再次尝试推送它时说同样的问题“提示:更新被拒绝,因为你当前分支的尖端落后”有什么建议吗?
@EdisonPebojot 如果您的本地分支设置为跟踪远程分支,则简短版本有效。然后将远程分支称为本地的上游分支。您可以阅读有关它的更多信息devconnected.com/how-to-set-upstream-branch-on-git
R
Rebecca Abriam

我会这样做:

暂存所有未暂存的更改。混帐添加。隐藏更改。 git stash save 与远程同步。 git pull -r 重新应用本地更改。 git stash pop 或 git stash apply


这也是非常危险git pull -r 将意味着您相对于远程分支的头部所做的任何提交都将被彻底销毁!您的“存储”只会是相对于您上次本地提交的更改! OP 在评论中特别说“在尝试推送之前我已经做了几个本地提交”......
正如我所指出的,使用 git pull -r 是个人喜好问题。我会在不会导致合并冲突或提交破坏的情况下使用它,正如@mike 提到的那样。否则,git pull 就足够了。在我看来,使用 git pull -r 的美妙之处在于它不会导致合并冲突,因为它不会创建额外的自动merge提交,从而将我的本地提交放在首位(即更清晰的日志历史记录)我觉得“噪音”是可以避免的。
C
Chetan Chandrashekar

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

切换到主分支 (git checkout master) 拉动主分支 (git pull) 创建新分支 (git 分支 C) - 请注意,我们现在从主分支分支现在当您在分支 C 上时,与分支 B 合并(git merge B) 现在做一个推送 (git push origin C) - 工作:)

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

希望这可以帮助。


如果你合并这两个 ie B & C
B
Bohemian

这对我有用:

git pull origin $(git branch --show-current)
git push

fyi git branch --show-current 返回当前分支的名称。


l
legoscia

我有同样的问题。不幸的是,我的目录级别错误。

我试图:git push -u origin master ->有一个错误

然后我尝试了:git pull --rebase ->还有一个问题
最后我更改目录cd your_directory

然后我又试了一次(git push),它成功了!


u
user13845698

当有人将代码提交到开发/主控并且最新代码尚未从开发/主控重新定位并且您尝试覆盖对开发/主控分支的新更改时,会出现此问题

解决方案:

如果您正在处理功能分支并通过执行 git checkout develop/master 切换到 master/develop 分支,请进行备份

做 git pull

当您在同一个文件中进行更改时,您将获得更改并发生合并冲突,而该文件尚未从开发/主文件重新定位

如果发生冲突,请解决冲突并执行 git push,这应该可以


T
Taersious

通过以下 Visual Studio 2017 更改,我能够克服此问题:

在团队资源管理器中,转到设置。转到全局设置以在全局级别配置此选项;转到存储库设置以在存储库级别配置此选项。拉到所需设置时设置 Rebase 本地分支(对我来说是 True),然后选择更新保存。

请参阅:https://docs.microsoft.com/en-us/vsts/git/concepts/git-config?view=vsts&tabs=visual-studio#rebase-local-branch-when-pulling


M
Marek

我用过

git push origin master

更新拒绝后,我查看了一个历史记录:

git log --oneline --all

我的 HEAD -> master 高于 origin/master。

但是我使用了强制,这就足够了:

git push --force-with-lease origin master

头颅又聚在一起了……


这基本上会丢弃同事所做的事情。它没有回答问题
S
Satyam

您当前不在分支上。要将历史推送到当前(分离的 HEAD)状态,请使用

git push origin HEAD:<name-of-remote-branch>

A
Asanke

我遇到过同样的问题。

修复:git pull origin {branch-name} 全部排序。

参考:There is no tracking information for the current branch


u
ugobest

这对我有用,我会推荐给你。如果您在已提交的本地分支上,请尝试使用此 git 命令重命名分支

git branch -m <new_name>

然后再次推动

git push --set-upstream origin <new_name>

E
Emel Ergelen

我遇到了这个问题,我意识到 .gitignore 文件已更改。所以,我改变了 .gitignore 并且我可以拉动这些改变。