【问题标题】:"Move" files to their own branch in Git在 Git 中将文件“移动”到它们自己的分支
【发布时间】:2011-11-15 10:07:29
【问题描述】:

在 master 中,我有一些文件应该更好地放在功能分支中。我想创建这样一个分支并将文件放在那里,同时从 master 中删除它们。

我不关心历史,即不需要从以前的提交中删除文件。当我这样做时

$ git ls-files
stay.txt
move.txt

$ git checkout -b feature
Switched to a new branch 'feature'

$ git checkout master
Switched to branch 'master'

$ git rm move.txt

HEAD 中的情况很像我想要的。但是,当我想将 master 合并到 feature 时,我会遇到问题。我必须处理它还是有针对这种情况的解决方案?

【问题讨论】:

    标签: git branch feature-branch


    【解决方案1】:

    确实,如果您这样做,当您合并这两个分支(主分支和功能)时,您删除文件的提交将应用于功能,从而删除您试图保持安全的文件功能。

    另外,如果你在master中删除后修改feature中的那些文件,在合并过程中,文件将被删除然后修改,造成冲突:

    CONFLICT(修改/删除):test.txt 在 HEAD 中删除并在 特征。 test.txt 的版本特征留在树中。自动合并 失败的;修复冲突,然后提交结果。

    如果文件没有被修改(没有冲突),你可以在合并后通过恢复删除提交来解决这个问题:

    $ git merge feature # in master
    $ git revert SHA-of-the-commit-deleting-your-file
    

    您将获得该功能和主分支的所有提交,而不会丢失您的文件。

    但是,如果发生冲突,您可能必须手动解决此问题(除非有人为此找到了完美的 git 命令!):

    $ git merge feature # in master
    $ git mergetool # use modified versions of files
    $ git commit -m "Merge with deleted files solved"
    

    【讨论】:

    • 好答案(+1),但我想知道是否有某种合并驱动程序可以到位以“保护”这些文件并避免它们在合并期间被删除(避免需要恢复或解决冲突)
    • 我想知道,git rm 他们会不会更好,然后在功能分支中重新添加他们。当然,这会打破他们的历史,但在我的情况下,未来的易用性应该超过这一点。
    • 如果只是为了简单和保留文件,你可以在 master 上使用 git rm,在 feature 上使用 git add,你应该没问题。如果您使用大文件,我看到的唯一问题可能会出现:而不是将这些文件存储在您的存储库中一次,我相信它们会被找到两次,并且您可能必须找到一种方法来永久删除初始文件(这涉及非快进提交...)。如果您只处理小文件(配置文件等),这并不真正关心您。我也可能是错的(如果文件具有相同的名称和相同的内容......)。
    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2021-03-03
    • 2021-12-25
    • 2017-03-10
    • 2020-10-23
    • 2012-04-20
    相关资源
    最近更新 更多