如何提交修改可以帮助您在Git中切换分支?

时间:2017-10-06 19:35:23

标签: git

我正在阅读Git书,对于修改提出了一个好奇的一面:

  

但是,在[更改分支]之前,请注意您的工作目录或   暂存区域具有与分支冲突的未提交更改   你正在退房,Git不会让你换分支机构。这是最好的   切换分支时,请保持干净的工作状态。有办法   绕过这个(即,藏匿和修改)我们会   稍后介绍

https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

我理解存储是如何帮助的,因为您基本上将未提交的更改存储在存储中,以便以后可以重新应用它们,使您的工作/暂存位置没有任何未提交的更改。但我真的没有看到如何在这种情况下使用修改修改。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

正如他们在那里所说,“我们将在稍后介绍”。 :-)关键是你可以继续现在提交 ,制作一个永久的, 1 不可更改的临时工作状态副本。你可以从这开始:

...--o--o   <-- master
      \
       o--o--o   <-- feature

您正在为feature的下一次提交工作。它尚未准备就绪,但您必须在其他地方修复(在master或其他分支中)。因此,如果您git add所有内容和git commit,您将获得一个新的,永久性的,但您想要的临时提交:

...--o--o   <-- master
      \
       o--o--o--●   <-- feature

稍后,您回到分支feature,它有这个糟糕的(纯黑色圆圈)提交。现在,您完成了预期要提交的工作,并使用git commit --amend

git commit --amend做的是像往常一样进行新提交,除了添加到分支的顶端,而不是将当前的提交推到一边:

...--o--o   <-- master
      \
       o--o--o--o   <-- feature
              \
               ●   [abandoned]

这个现在被放弃的提交,仍然像任何Git提交一样永久且不可更改,不再是 findable 。如果您查找从feature开始并向后(向左)工作的提交,您将看不到它。如果您查找从master开始并向后工作的提交,您将看不到它。您可以找到它的唯一方法是使用Git的 reflogs ,默认情况下,它会暂停这些放弃的提交一段时间 - 至少30天。

最终,保持提交●的reflog条目或条目将过期。在这一点上,提交不受git gc肆虐的鬣狗的保护:他们最终会找到并肢解提交,消耗掉骨头和所有内容,而且它似乎永远都不会发生。

1 像Git中的任何东西一样永久,就是:Git会努力记住它,但是一旦找不到它,这些提交就会被收集起来作为垃圾扔掉。 Mercurial有点不同:永久提交是完全永久的,就像在Git中一样,直到你运行hg strip,删除它们及其所有后代。

答案 1 :(得分:-1)

使用git修改将现有提交更改为另一个提交,因为消息不同。那么你基本上是在同一个分支上,你可以提交你未提交的更改。如果您想返回其他分支机构,您仍然可以发出“结帐”信息。命令到达那里,它不包含你未提交的更改。

我应该补充一点,如果你要修改,你真的需要跟踪提交哈希,这样你就不会迷路。使用真实(例如特征)分支或存储更像是一种标准的方法。我认为修改实际上是为了它的名字..来修改提交消息,而不是用哈希来玩。