我不太确定这是否是macOS/zsh特定的问题,所以我还是要添加标签。考虑一下这个虚拟存储库,其中包含一些虚拟文件夹和文件:
test_20200324:master
|-> test_folder_one
| |->....
|-> test_folder_two
| |->....
|-> test_files...
|-> setup.sh
以及CCD_ 1分支。setup.sh
被指示创建一个新分支,签出并重命名文件夹:
git branch production
git checkout production
git mv test_folder_two test_folder_four
现在运行完脚本后,我希望看到一个新的分支:
test_20200324:production
|-> test_folder_one
| |->....
|-> test_folder_four
| |->....
|-> test_files...
|-> setup.sh
而主分支的内容是完整的。然而,由于某种原因,脚本将整个存储库搞砸了(幸运的是,我没有在实际生产中运行它!(。脚本已重命名所有分支中的特定文件夹。主分支也将其test_folder_two
文件夹重命名为test_folder_four
。如果你能帮助我了解问题所在以及我如何解决问题,我将不胜感激
当您运行git mv
时,该更改是工作树状态的一部分(在git中"stage"的含义中也有描述(,但不是而是分支的一部分。
这意味着,如果您更改了分支,而git没有,然后尝试保留工作树更改(如mv
(,那么您的更改将被丢弃。
丢弃某人的工作是不好的——这不是源代码管理系统应该做的事情。因此,当你从一个分支切换到另一个分支时,git会尝试将未提交的工作树更改应用到新分支(如果它们冲突/无法应用,则拒绝完成签出(。
那么,你如何才能阻止这种情况的发生?
只需运行git commit -m 'Renamed folder two to four'
,更改就会牢牢地放在您已经签出的分支上,而不是遵循您的工作树。