【问题标题】:On local branch, don't want to commit changes, but need to switch to another branch在本地分支上,不想提交更改,但需要切换到另一个分支
【发布时间】:2013-08-07 01:00:48
【问题描述】:

我正在分支 A 上工作,但功能/任务尚未完成。然后我需要切换到另一个分支 B 进行快速修复。当我尝试打开另一个分支时,Git 会强制我保存本地更改,否则我将丢失所有本地更改。

我需要提交我不完整的代码。有什么方法可以在多个分支之间切换而不会提交和丢失任何代码?或者有没有更好的方法来处理这种情况?

【问题讨论】:

标签: git git-commit git-checkout git-stash


【解决方案1】:

一个选项,如mipadi demonstrates,是简单地使用git stash

另一种选择是简单地提交您当前正在进行的工作,切换分支,然后当您准备好切换回来时,将混合重置回您之前的提交:

# While working on "feature" branch,
# you suddenly need to go work on a hotfix:
$ git commit --all --message "Backup my feature work"
$ git checkout -b hotfix master

# You did your hotfix, and are ready to go back to feature
$ git checkout feature
$ git reset HEAD^

git reset HEAD^ 将在您进行备份提交之前对提交进行混合重置,并且您在备份提交中所做的所有更改都将恢复到您的工作副本。来自official Linux Kernel documentation for git reset(强调我的):

重置索引但不重置工作树(即,已更改的文件被保留但未标记为提交)并报告尚未更新的内容。这是默认操作。

【讨论】:

  • +1 我也推荐这个,因为git stash 与任何分支都无关。执行git commit -a -m "stashing" 会保留您工作的上下文。这应该是公认的答案。
  • Stashing 可能与分支无关,但 基于当前的 HEAD 提交。 git show -s stash 将存储提交显示为两个父提交的合并,其中第一个是存储所基于的 HEAD。并且git stash [save]没有给定消息默认记录分支的名称。
  • 我更喜欢存储任何临时的东西,因为只有一个git stash 命令可以存储索引和工作树的状态。提交不会捕获工作树中未暂存到索引的更改。
  • HEAD 在 Linux (stackoverflow.com/questions/25976794/…) 上似乎区分大小写。如果是这样,则应更新答案以使用HEAD 而不是head
【解决方案2】:

您可以使用git stash,它将保存您的更改而无需创建提交。1

首先,存储您的更改:

$ git stash

然后切换到你的另一个分支:

$ git checkout branch-B

当你阅读时,回到你原来的分支并取消你的更改:

$ git checkout branch-A
$ git stash pop

有关其他用例的更多详细信息和细节,请参阅上面链接的文档。


1 从技术上讲,它确实会创建一个提交,但 git stash 使用了一些魔法,所以您实际上并没有看到提交,而且 Git 的工具知道如何正确处理使用这些伪提交。

【讨论】:

  • 好吧,如果我在分支 B 上做了一些更改并提交给它们,不会提交我们的分支 A 更改?
【解决方案3】:

我知道这个问题很老,我只想分享一种可以帮助您处理这种情况的技术。您实际上可以将其提交到分支并稍后撤消它。

1.提交到分支。 (仅提交。不要推送。)

$ git commit --all --message "Commit Message here."

2。如果您想继续在分支上工作,只需签出并撤消您的最后一次提交,而不会丢失您的最新更改。

$ git reset --soft HEAD~1

注意 --soft 标志:这可以确保保留未完成的修订中的更改。运行命令后,您会在工作副本中发现更改为未提交的本地修改。

您可以阅读更多here

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 2020-10-23
    • 1970-01-01
    • 2020-06-03
    • 2016-09-15
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多