git - 如何在保留特定目录的同时将其他分支与我的同步?

标签 git

这是我所做的:

  • 我有一个“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/

相关文章:

git - 如何在 TODO 审核后继续 "creating"提交或跳转到 IntelliJ Idea 中的源代码?

android - 如何将我的项目从 Android Studio 添加到我的 GitHub 页面?

git - 为什么 Git 仅仅因为我在本地分支上有提交就拒绝我的请求?

git - 试图通过在 visual studio 2017 的 .git-ignore 文件中添加 slnx.sqlite 文件来撤消/忽略,但它仍然显示未提交。

git - 如何在 Dockerfile 中添加 git repo 路径?

git - 无法推送到 GitHub - 一直说需要 merge

windows - Windows 局域网上的 Git

git - Sourcetree 说未暂存的更改,但命令行没有

git - 原子提交最佳实践

node.js - 如何在 github 操作工作流 ci 中通过 npm 安装私有(private) github 存储库