这是我所做的:
- 我有一个“my_branch”,还有一个“master”分支。
- 我一直将我的工作提交给“my_branch”,比如说一个月。
- 为了与“master”中的代码保持一致,我每隔 2 或 3 天将 master merge 到“my_branch”中。
- 我只更改“my_dir/”下的代码,而没有其他人触及此目录
- 其他人在“somebody1/”、“somebody2/”等下更改代码,但我从未接触过。
这是我的问题:
- 由于某种我不知道的原因,“my_dir/”(我没有碰过它们)以外的目录下的文件与“master”中的文件不同。
- 一个可能的原因是,在 merge “master”到“my_branch”时,“my_dir/”以外的目录下的一些文件发生了变化,出现了冲突。也许我选择了“解决冲突”而不是“使用他们的”,并让我无意中触及了这些文件。
- 即使我不断将“master” merge 到“my_branch”中,那些无意更改的文件也永远不会同步,除非它们被 master 中的其他人更改。
- 如果我将“my_branch” merge 到“master”中,“my_dir/”以外的目录下且与“master”不一致的文件会因为“my_branch”而被更改,而这不是我想要的。
这是我想做的:
如何使“my_branch”中除“my_dir/”以外的文件与“master”相同,同时保持“my_dir/”下的文件与“my_branch”相同?一种可能的方法是我 checkout “master”,将“somebody1/”、“somebody2/”等目录下的所有文件复制到其他地方,然后 checkout “my_branch”,然后将这些文件复制回我的工作目录并然后提交。
但是我怎样才能用Git命令做到这一点呢? Git 提供这样的工具吗?
最佳答案
从您的分支,假设您的 Remote 名为 origin
git fetch
git restore --source=origin/master .
git restore --source=my_branch my_dir/
git commit -am "Resynced everything but my_dir with master"
评论后编辑:如果您运行的是 2.20.1 之前的 git 版本(感谢 Vespene Gas 的提醒),您将无法使用 git restore
。另一种选择是旧命令 git checkout <ref> [-- <path> [<other_path>]]
。话又说回来,正如马特正确指出的那样,您可能需要在执行类似 git clean
的操作后删除存储库中不需要的文件。 )
关于git - 如何在保留特定目录的同时将其他分支与我的同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67816713/