gitmv一个bash脚本,用于重命名内部特定分支的文件夹,从而更改所有分支



我不太确定这是否是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',更改就会牢牢地放在您已经签出的分支上,而不是遵循您的工作树。

最新更新