我该如何解决“比master落后1个提交”的问题?

112

推送后,我在远程仓库看到了以下消息:

比主分支落后 1 个提交。

此合并存在冲突,必须在提交前解决。

要手动将这些更改合并到 TA20footerLast,请运行以下命令:

git checkout 7c891f50c557

注意:这将创建一个分离的 HEAD!

git merge remotes/origin/master


6
如果你想查看主分支上最新的1个提交,运行命令 git log -1 -p origin/master - Devin Rhode
11个回答

139
在开始之前,如果您不熟悉命令行操作,可以使用SourceTreeGitExtensionsGitHub Desktop或您喜欢的工具完成以下所有步骤。
为了解决该问题,你可能有两种情况

1. 仅修复落后于提交的远程存储库分支

示例:两个分支都在远程端

ahead === 主分支

behind === Develop 分支

解决方案:

  1. 克隆存储库到本地工作区:这将提供您具有提交历史记录的主分支。

    git clone repositoryUrl
    
  2. 创建一个名称为Develop的分支,并在本地检出该分支

  3. git checkout -b DevelopBranchName // this command creates and checkout the branch
    
  4. 从远程的Develop分支拉取代码。可能会发生冲突,如果出现冲突,请解决冲突并提交更改。

  5.  git pull origin DevelopBranchName
    
  6. 将本地Develop分支与远程Develop分支合并

      git merge origin develop
    
  7. 将合并后的分支推送到远程开发分支

  8.   git push origin develop
    

2. 本地主分支落后于远程主分支

这意味着每个本地创建的分支都会落后。

在继续之前,您必须提交或存储在它之前提交的分支上所做的所有更改。

解决方案:

  1. 检出您的本地主分支


git checkout master
  • 从远程主分支拉取代码

  • git pull origin master
    

    现在你的本地主分支与远程分支同步。由于上述命令,从之前的本地主分支分支出的其他本地分支不再同步。为了解决这个问题:

    1. 检出落后于本地主分支的分支

    git checkout BranchNameBehindCommit
    
  • 合并到本地主分支

    git merge master  // Now your branch is in sync with the local Master branch
    
  • 如果这个分支已经存在于远程仓库中,你需要将你的更改推送到远程仓库。

        git push origin branchBehindCommit
    

    1
    在1)- 3)处出现错误:自动合并失败;请解决冲突,然后提交结果。 - skdhfgeq2134

    76
    如果你的分支落后于主干,则执行以下操作:
    git checkout master (you are switching your branch to master)
    git pull 
    git checkout yourBranch (switch back to your branch)
    git merge master
    

    合并后,请检查是否存在冲突。
    如果没有任何冲突,则执行以下操作:

    git push
    

    如果存在冲突,请修复您的文件,然后执行以下步骤:

    git add yourFile(s)
    git commit -m 'updating my branch'
    git push
    

    通常情况下,开发人员没有将代码推送到主分支的权限。在这种情况下,使用以下解决方案会更好: https://dev59.com/-1sX5IYBdhLWcg3wNdDj#59064413 - Ashwani

    55
    1. 克隆你的分支:

      • git clone git@github.com:YOUR-USERNAME/YOUR-FORKED-REPO.git
    2. 在你的分支存储库中添加原始存储库的远程仓库:

      • cd into/cloned/fork-repo
      • git remote add upstream git://github.com/ORIGINAL-DEV-USERNAME/REPO-YOU-FORKED-FROM.git
      • git fetch upstream
    3. 将原始存储库中的更改更新到你的分支以跟上他们的更改:

      • git pull upstream master
      • git push

    非常感谢,这正是我所需要的。运行得非常好。 - DirectedSoul
    运行得非常好,解释得非常清楚! - Sebastian Juarez

    27

    如果收到的消息是“落后主干n个提交”,

    则需要将您的dev分支与master重新基于。 您收到上述消息是因为在从master检出dev分支后,master分支有新的提交并向前移动了。 您需要将这些新提交合并到您的dev分支。

    步骤:

    git checkout master
    git pull        #this will update your local master
    git checkout yourDevBranch
    git rebase master
    

    可能会有一些合并冲突需要您解决。


    1
    只是想补充一下,变基应该只用于私有分支:https://blog.axosoft.com/golden-rule-of-rebasing-in-git/ - slim
    3
    由于Rebase会重新编写提交哈希,可能会导致一些问题,因此应谨慎应用。 - Samuel Gonçalves
    已经完成了,但是出现了错误。 - KansaiRobot

    6

    假设您目前在分支myBranch
    执行以下操作:-

    git status
    

    如果所有更改都已提交。
    git pull origin master
    

    如果更改没有提交,则
    git add .
    
    git commit -m"commit changes"
    
    git pull origin master
    

    检查是否存在冲突,解决并提交更改

    git add .
    
    git commit -m"resolved conflicts message"
    

    然后推送

    git push origin myBranch
    

    3
    1. 切换到主分支:git checkout master
    2. 从远程主分支拉取最新代码:git pull origin master
    3. 切换到你的分支:git checkout BranchNameBehindCommit (你的分支名)
    4. 将主分支合并到你的分支:git merge master
    5. 推送你的分支到远程仓库:git push origin branchBehindCommit

    一切都是最新的。我尝试了,但是“一切都是最新的”对我没有用。 - charitha amarasinghe

    1
    查看您在GitHub上的存储库...
    假设主分支或主分支是您的主要分支,并且您还有另一个分支作为dev,并且您的dev分支落后于主分支或主分支N个提交,而本地机器上没有关于此的任何信息。
    如何继续...
    首先,您必须将Github存储库克隆到计算机中,但是首先,您的本地git不必了解您的辅助分支状态,只需从主分支或主分支获取即可,因此Git仅更新您的远程标签分支,并且本地尚未进行任何提交。
    因此,您需要至少1个提交,1个推送到主分支或主分支,以及1个拉回到您的本地。
    请勿推动dev分支的任何内容,否则您将比主分支或主分支多1个提交并落后于N个提交(因此会发生冲突)...
    因此,您需要一个辅助分支来向远程主分支或主分支发送拉取请求。
    毋庸置疑。如何在此场景中继续:
    克隆存储库后... git checkout -b aux-branch -> 它将创建并检出该分支
    现在,您必须进行至少一次更改,以记录第一个提交在您本地的Git中,假设您目前没有任何要实现的内容...获取README.md文件以更改字母、空格、空行等。 git status -> 您将看到已修改README文件 git add README.md -> 将其添加到已准备好提交的暂存区域中 git commit -m "modified readme file" git push -u origin aux-branch -> 它应该生成一个链接,该链接将带您转到存储库以打开并接受有序的拉取请求。
    我使用Rebase和Merge来接受它(下拉菜单中绿色按钮的最后选项),在接受GitHub之后,GitHub会问您是否要删除aux-branch...是的,您要删除,因为您的主分支或主分支现在具有由aux-branch带来的最新功能。 现在回到您的本地(Git),按以下方式进行: git checkout main 或 master git branch -D aux-branch -> 在本地中删除 git remote update --prune-> 它使两个fetch和更新到您的远程。 git pull -> 从远程GHub接收最新更新。 git checkout dev git rebase dev main 或 master -> (rebase或merge) git push -u origin dev -> 将更新提升到您的远程分支

    现在,请前往您的GitHub并重新加载页面,然后下拉到您的开发分支,您会看到您的开发分支与主分支相同...

    就是这样。希望我能帮助到您们...


    0
    如果您收到的消息显示您落后主分支 'n' 次提交,则可以在 Tortoise Git 中使用 'git sync' 选项。选择您想要从中拉取更改的分支(目标),然后点击“拉取”。这将把来自远程(主/任何目标分支)的所有更改都拉取到您的开发分支中。拉取之后,点击“推送”将您本地开发分支上所有同步更改推送到 git 上的远程开发分支中。

    0
    在IntelliJ中,您可以执行以下简单步骤 - 检出您的分支并从main/branch name拉取最新提交 将这些更改合并到您的分支中。-> vcs -> git -> merge changes (origin/main) 将您的分支推送到远程 这样应该使您的分支与目标相同。

    Anagha,请通过添加适当的命令来改进您的答案。 - SayAz
    1
    你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

    0

    简单修复

    1. 将存储库克隆到您的系统中

      git clone repositoryUrl

    2. 进入落后于主分支的提交的分支

      git checkout branch_name

    3. 将分支变基为主分支

      git rebase -i origin/master

    4. vi代码编辑器将打开,输入:wq并按回车键

      :wq

    5. 最后将更改推送到分支,现在不会有任何落后的提交了

      git push -f


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