如何在不撤消所有更改的情况下拉出 git branch?

问题描述

我有一个正在工作的 git 分支,但我把它搞砸了。我做了一堆本地更改,我正在尝试将这些更改和此提交放入 PR 中,但如果不从分支更新,我就无法做到这一点,因为它们以某种方式不同步。所以每当我跑 git status 我得到

Your branch and 'origin/myChanges' have diverged,and have 1 and 1 different commits each,respectively.
  (use "git pull" to merge the remote branch into yours)

我用 git pull 尝试过的一切只会让我的所有更改都消失,但我需要从分支更新,然后才能将提交发送给 PR。我还尝试运行强制推送以使分支与我的相同(这只是我为此功能制作的一个小分支,因此风险很小)。我不知道如何以这样一种方式 git pull 使我的更改不被破坏和吹走,我想保留本地的所有内容并且我不关心分支上的任何内容

解决方法

概括而言,您在这种情况下的步骤应该类似于:

  1. Stash 本地未提交的更改。
  2. 运行 git fetch 以确保您的本地克隆知道远程引用的内容。
  3. Rebase 您当地的分支机构到 origin/myChanges
  4. Fix up any merge conflicts 发生的事情。
  5. 弹出你的stash
  6. 修复因存储弹出而发生的任何合并冲突。
  7. Force-push with lease 您对 origin/myChanges 的更改。如果您有多个开发人员在同一个分支上工作(您确实真的不应该这样做,因为它会导致这些情况),请告知他们您已强制推送。
  8. 继续处理您的更改,然后在准备就绪时提交并推送。
,

git stash 在这种情况下可能会有所帮助

当你想记录工作目录和索引的当前状态,但又想回到一个干净的工作目录时,使用 git stash。该命令会保存您的本地修改并恢复工作目录以匹配 HEAD 提交。

仔细查看 git stash 的文档。如果我理解正确,您首先将本地更改隐藏起来以获得干净的状态。然后你可以 git pull 来合并分支的远程更改。然后再次添加存储,使用 git stash pop

从存储列表中删除单个隐藏状态并将其应用于当前工作树状态的顶部。