【问题标题】:git mv a bash script to rename a folder of a specific branch inside changes all branchesgit mv 一个 bash 脚本,用于重命名特定分支的文件夹,更改所有分支
【发布时间】:2020-07-05 02:50:00
【问题描述】:

我不太确定这是否是 macOS/zsh 特有的问题,所以我还是要添加标签。考虑this dummy repository,带有一些虚拟文件夹和文件:

test_20200324:master
   |-> test_folder_one
   |     |->....
   |-> test_folder_two
   |     |->....
   |-> test_files...
   |-> setup.sh

还有一个master 分支。 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

而master分支的内容是完整的。但是,由于某种原因,该脚本将整个存储库弄乱了(幸运的是,我还没有在实际生产中运行它!)。该脚本已在所有分支中重命名该特定文件夹。并且 master 分支也将其 test_folder_two 文件夹重命名为 test_folder_four。如果您能帮助我了解问题所在以及如何解决,我将不胜感激。

【问题讨论】:

  • 标记 bash zsh,不能同时标记两者。它们是不同的、相互不兼容的外壳。 (如果你有一个 zsh 脚本,不要在你的问题标题中加上“bash”!)
  • 也就是说,至于真正的问题,我需要知道您如何检查或测试存储库的内容。
  • 也就是说,在我看来,您根本就没有签入git mv。在您将其提交到分支之前,它只是您工作树状态的一部分。
  • 评论很容易被删除。此外,重要的是,您可以在聊天中粘贴比在 cmets 中更长的内容,我将要求您提供一些输出相当长的命令。
  • 也就是说,cmets 永远不应该被期望作为答案,这听起来像是你希望他们做的事情。被索引等等。任何真正重要/预计会持续存在的内容都应编辑到问题中(如果对此进行了澄清)或复制到适当的答案中。

标签: git macos


【解决方案1】:

当您运行git mv 时,该更改是您的工作树状态的一部分(并且在What does "stage" mean in git? 中描述的意义上也是分阶段的),但不是您的分支的一部分。 p>

这意味着如果您更改了分支,而 git 没有 然后尝试保留工作树更改(例如 mv),那么您的更改将被丢弃。 p>

丢弃某人的工作是不好的——这不是源代码控制系统应该做的事情。因此,当您从一个分支切换到另一个分支时,git 会尝试将未提交的工作树更改应用到该新分支(如果它们冲突/无法应用,则拒绝完成结帐)。


那么,你怎么能阻止这种情况发生呢?

只需运行git commit -m 'Renamed folder two to four',更改将牢牢地放在您已经签出的分支上,而不是跟随您的工作树。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-09
    • 2021-01-31
    • 2011-04-20
    • 2011-04-29
    • 2016-06-29
    • 2018-06-21
    • 2019-03-17
    • 2021-04-23
    相关资源
    最近更新 更多