Git 中的分支非常便宜。创造额外的东西很少会受到伤害。人们不应该觉得有义务制作它们,但这应该是他们的默认设置,他们也不应该因为制作了一个被证明是微不足道的东西而感到愚蠢。
请注意,只要您尚未发布(推送或允许其他人获取)提交,就可以将提交“移动”到分支上。例如,假设你一开始就有这个:
...--A--B--C <-- HEAD -> master, origin/master
然后,您无需先创建分支即可修复某些问题。你做出新的承诺D
:
...--A--B--C <-- origin/master
\
D <-- HEAD -> master
但后来你发现这还不够,或者是错误的修复,并决定这应该是一个分支fix-xxx
。只需添加一个指向D
(使用例如,branch fix-xxx master
)的新分支标签,然后设置master
为指向回提交C
(使用,例如,git reset --hard HEAD~1
因为您现在仍在使用master
),给出:
...--A--B--C <-- HEAD -> master, origin/master
\
D <-- fix-xxx
现在您可以git checkout fix-xxx
将提交D
放回工作树并设置HEAD
为指向fix-xxx
:
...--A--B--C <-- master, origin/master
\
D <-- HEAD -> fix-xxx
一切看起来都好像你fix-xxx
先创建了,然后提交了D
。
换句话说,这一切都是双向的:随意创建尽可能接近自由的分支,但不要创建它们然后“移动”提交(这里实际上没有任何移动:我们只是洗牌了周围的分支标签!)稍后代替。程序员可以做任何对他们有用的事情。
先创建分支,然后再不需要它的最大优点是,这比不先创建分支,然后再需要它的工作量要少。此外,该步骤非常危险(您必须首先确保工作树是干净的)。git reset --hard