Git不快进更新被拒绝 合并远程更改

26

我该如何解决这个问题?我试图提交(commit),但是出现了以下错误:

git push origin monty_svm_dev

To git@github.com:  ! [rejected]        monty_svm_dev -> monty_svm_dev
(non-fast-forward) error: failed to push some refs to
'git@github.com:/mygit.git' To prevent you from losing history,
non-fast-forward updates were rejected Merge the remote changes before
pushing again.  See the 'Note about fast-forwards' section of 'git
push --help' for details. root@li409-202:~/mypath#
4个回答

36

首先要执行git pull origin monty_svm_dev

发生的情况是远程分支比本地分支更新。

所以在你推送更改之前,你需要首先获取并合并远程分支上的更改。

你可以通过执行git checkout your_branch,然后执行以下命令之一来完成:
git fetch origin your_branchgit merge your_branch

git pull origin your_branch # fetch and merge in one operation

如果你的分支是主分支,或者是你的分支名(在你的情况下似乎是monty_svm_dev),

一旦完成这些步骤(并解决任何冲突),你可以执行git push origin monty_svm_dev命令。


或者是原帖发布者可能已经重新基于他们的分支。 - knittl
我听说过pull是不好的,因为它会以一种通常不希望的方式合并。个人而言,我喜欢保持我的历史线性。当我遇到与提问者相同的错误时,我该如何实现这一点呢? - Daniel Kaplan
我尝试使用命令“#git pull origin devops_branch_22112016”进行更新,但出现以下错误: 您本地对以下文件所做的更改将被合并覆盖: www/index.html 请在合并之前提交您的更改或将它们存储起来。 操作已中止。 - Ashish Karpe
也尝试了jenkins@ip-172-31-22-20:~/workspace/directory-react-nodejs$ git fetch origin devops_branch_22112016 来自github.com:HSarode-Compumatrice/directory-react-nodejs
  • 分支 devops_branch_22112016 -> FETCH_HEAD jenkins@ip-172-31-22-20:/workspace/directory-react-nodejs$ git merge devops_branch_22112016 已经是最新的。 jenkins@ip-172-31-22-20:/workspace/directory-react-nodejs$
- Ashish Karpe
仍然由用户Ashish Karpe开始 在工作区/var/lib/jenkins/workspace/directory-react-nodejs中构建
git rev-parse --is-inside-work-tree # timeout=10 从远程Git存储库中获取更改 git config remote.origin.url git@github.com:HSarode-Compumatrice/directory-react-nodejs.git # timeout=10 从git@github.com:HSarode-Compumatrice/directory-react-nodejs.git获取上游更改 git --version # timeout=10 使用GIT_ASKPASS设置凭据
- Ashish Karpe
git fetch --tags --progress git@github.com:HSarode-Compumatrice/directory-react-nodejs.git +refs/heads/:refs/remotes/origin/ git rev-parse refs/remotes/origin/master^{commit} # timeout=10 git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 git rev-parse origin/master^{commit} # timeout=10 错误:找不到任何修订版本进行构建。请验证此作业的存储库和分支配置。 已完成:失败
- Ashish Karpe

2

当你从一个分支执行

git pull

时,实际上会发生两个操作:fetch 和 merge。如果本地有一些更改,那么在提交更改之前 git 不允许你推送它。

此外,如果远程仓库中有尚未被拉取和合并的更改,也会出现这个问题,所以你需要再次拉取并推送。如果这样做没有解决问题,请回复本消息。


1
这个问题出现在用户在执行git commit命令后忘记执行git push命令的情况下。使用git时,请始终确保遵循基本步骤。

在使用git时,理想的工作流程是按照以下顺序依次使用以下git命令:

git pull
git add
git commit
git push

我个人避免浏览stackoverflow上有关git的大部分问题,因为我总是把我的git命令活动与上述顺序相对应。
我创建了一个缩略语来确保我不会忘记,希望对读者有用,即: pacp(读作:package push where(p = git push,a = git add,ck = git commit,push = git push))。
我记忆git push,add,commit,pull的方法是:
get pack push(意思是:先获取pack然后推送)。
总之,记得先“获取”包,然后再“推送”。
解决问题: 我想添加我最常用的恢复git命令,它们是:
git checkout -- path/to/file/fileName.something #undo changes in file

上述操作可以撤销文件中的更改...对于多个文件,可以使用*作为文件名进行类似操作,同样地,可以对多个以空格分隔的目录应用相同的操作。
git reset filename.txt 

上述命令将文件从暂存区中移除...执行此命令后,我们可以安全地执行git commit,git仅会提交那些已经在暂存区的文件,这意味着文件"filname.txt"不会被提交。
git pull origin your_intended_branch

将更改与您的目标分支最新版本合并,这基本上是合并您提交但未推送的更改。一切顺利后,只需执行推送操作:

git push 

0
执行 Git pull 命令,它会将远程分支的最新代码变更拉取到本地,然后你就可以推送你的修改了。

1
这个答案已经给出并且更详细(https://dev59.com/MGct5IYBdhLWcg3wPbIm#12236918)。如果你想扩展并且让你的答案提供其他答案没有的东西,请继续。 - indivisible

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接