我正在处理一个分支(称为big_new_feature
)中的一些文件。这些文件尚未准备好提交,但我需要切换分支以在另一个分支(称为stable_branch
)中进行快速修复。为什么我不能只暂存文件big_new_feature
并签出stable_branch
?为什么我必须big_new_feature
在切换到之前实际提交文件stable_branch
?
还是我误会了?
我正在处理一个分支(称为big_new_feature
)中的一些文件。这些文件尚未准备好提交,但我需要切换分支以在另一个分支(称为stable_branch
)中进行快速修复。为什么我不能只暂存文件big_new_feature
并签出stable_branch
?为什么我必须big_new_feature
在切换到之前实际提交文件stable_branch
?
还是我误会了?
你不必提交这些。如果另一个分支也没有更改这些文件,那么您可以将它们暂存。尽管您可能不想这样做,因为 - 好吧,因为现在它们将在另一个分支上上演,听起来您不想在另一个分支上提交它们。
% vi foo.c
% git add foo.c
% git checkout branch
M foo.c
Switched to branch 'branch'
% git status
On branch branch
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: foo.c
所以很有可能这样做,但现在foo.c
要提交到另一个分支,即您刚刚切换到以修复错误的分支。这几乎肯定不是你想要的。
我不确定你为什么不愿意在这种情况下承诺。这肯定是最容易应付的情况,比藏匿更容易(尽管这也是一种可能性)。
如果你担心你现在有一个半生不熟的“正在进行”的提交,那么只需commit --amend
你的下一个提交来清理它。或者在推送之前压缩提交。
当您切换分支时,跟踪文件的内容将更改以反映目标分支的尖端。
如果您的工作目录和阶段中的内容与目标分支状态不冲突,那么不,您不需要提交,您可以根据需要切换分支。
但是,我猜你会看到这个错误信息:
错误:您对以下文件的本地更改将被结帐覆盖
这是因为当您暂存内容时,它仍然以文件系统上文件的状态存在。
如果你在你的阶段所拥有的内容会与你的另一个分支的尖端的内容发生冲突,那么 Git 由于冲突而无法继续。Git 不知道哪一方应该获胜。
因此,我的建议是执行以下操作之一: