Git合并分支中分叉的目录到一个新的重命名目录,同时保持原来的目录



背景:我有一个很大的仓库,里面有很多不同目录下的小创意编码项目。有时我修改了分支上的一个目录,它变成了我想要保留的新目录。

在我的repo中,我有一个目录Dir,其中包含一个项目。

Experiment分支上,Dir偏离master。实际上我现在想保留Dir的两个变体,master上的原始版本和Experiment上的版本。

我怎么能在master上结束它现有的Dir和目录ExperimentDir,Dir的版本目前位于分支Experiment上?

实际上,我在单个repo中分叉一个目录。我可以只是复制和粘贴,但是我想保留两个分支对这些文件的更改历史.

我尝试了分支Experimentgit mv Dir ExperimentDir,然后合并到master。但是我留下了一个复杂的合并冲突,因为git试图在重命名中合并以避免重复。

我通过改编jthill的答案https://stackoverflow.com/a/66609162找到了一个解决方案。这个问题和答案解决了一个更普遍的问题,这就是我找不到它的原因。感觉有必要回答这个特定的场景:将单个目录合并到一个重命名的目录中,而不将其与原始目录合并。

  1. 在分支Experiment上,删除除了发散目录之外的所有内容。将该目录的内容移动到根目录,并删除现在为空的目录。提交。

  2. 在git:
git checkout master
git merge --no-commit -s ours Experiment

Automatic merge went well; stopped before committing as requested

git read-tree -u --prefix=ExperimentDir/ Experiment
git commit -m "Merge Experiment subtree into ExperimentDir"
git checkout master
git merge -s subtree Experiment

Merge made by the 'subtree' strategy.

注意,当记录ExperimentDir目录时,我需要使用--follow来查找历史记录,但是当记录Dir时,我需要使用而不是使用-follow来避免同时包含ExperimentDir的历史记录。

最新更新