【问题标题】:How to move to another branch without committing changes?如何在不提交更改的情况下移动到另一个分支?
【发布时间】:2022-01-15 09:53:35
【问题描述】:

在我的项目中,我有分支 ab。我正在处理a 并希望切换到处理b 的功能。但是,我在a 中的代码并不处于进行提交有意义的状态。不过,Git 不允许我切换到 b。如何在不提交a 的情况下切换到b

【问题讨论】:

标签: git git-branch


【解决方案1】:

您可以stash您的更改:

git stash
git checkout b
git commit -am 'finish work on b'
git checkout a
git stash pop

【讨论】:

  • 如果最后不做git stash pop会怎么样?
  • 保存的更改将保留,直到您弹出它们。但是请注意,如果您多次存储,则需要多次弹出,或引用确切的存储更改。查看文档了解更多详情。
  • 一个 stash 很像一个未命名的分支。
【解决方案2】:

可以使用git checkout 后跟--force 标志切换到丢失更改的现有分支

git checkout YOUR_BRANCH_NAME --force

【讨论】:

    【解决方案3】:

    使用临时分支进行更改

    您目前在分支a 上并且有一些未提交的更改。让我们创建一个分支并将这些更改提交到该分支。 git 分店很便宜。随心所欲地创建它们,完成后删除它们。

    git checkout -b a-temp
    git add .
    git commit
    

    这将创建并切换到一个新分支a-temp。您的临时更改将提交给a-tempa 保持不变。现在,让我们切换到b 并尝试cherry-pick 他们:

    git checkout b
    git cherry-pick a-temp
    

    成功的cherry-pick 会向b 添加一个提交,其中包含以前未提交的更改。让我们再次取消提交:

    git reset HEAD^
    

    现在,他们不再提交,b 就是它原来的样子。最初未提交的更改仍未提交。

    失败的cherry-pick 表示未提交的更改与b 分支冲突。你自己去弄清楚为什么;但是,首先,让我们放松一下,回到以前的状态。

    git cherry-pick --abort
    git checkout a
    git cherry-pick a-temp      # guaranteed to work, since a-temp branched off a
    git reset HEAD^
    

    现在您又回到了a,并进行了相同的未提交更改。您可以花时间找出合并冲突的原因,以及您需要采取的措施。

    在所有情况下,让我们删除临时分支,以便稍后再次尝试此技巧:

    git branch -D a-temp
    

    这种方法比使用 stash 稍微多一些工作,但在发生合并冲突的情况下更安全一些。我经常将git stash popgit stash drop 混淆,不得不进行一些清理工作。

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 2011-05-06
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多