git - 如何在保留特定目录的同时将其他分支与我的分支同步?
问题描述
这是我所做的:
- 我有一个“my_branch”,还有一个“master”分支。
- 我一直把我的工作提交给“my_branch”,比如说一个月。
- 为了与“master”中的代码保持一致,每 2 或 3 天,我将 master 合并到“my_branch”中。
- 我只更改“my_dir/”下的代码,而没有其他人接触过这个目录
- 其他人在“somebody1/”、“somebody2/”等下更改代码,但我从未接触过。
这是我的问题:
- 由于某些我不知道的原因,“my_dir/”以外的目录下的文件(我没有触及它们)与“master”中的文件不同。
- 一种可能的原因是,当将“master”合并到“my_branch”时,“my_dir/”以外的目录下的一些文件发生了变化,并且发生了冲突。也许我选择了“解决冲突”而不是“使用他们的”,并让我无意中接触了那些文件。
- 即使我将“master”合并到“my_branch”中,那些无意更改的文件也永远不会同步,除非它们被master中的其他人更改。
- 如果我将“my_branch”合并到“master”中,则“my_dir/”以外的目录下与“master”不一致的文件将因为“my_branch”而被更改,这不是我想要的。
这是我想做的事情:
如何使“my_branch”中的“my_dir/”以外的文件与“master”相同,同时将“my_dir/”下的文件与“my_branch”相同?一种可能的方法是我检出“master”,将“somebody1/”、“somebody2/”等目录下的所有文件复制到其他地方,然后检出“my_branch”,然后将这些文件复制回我的工作目录和然后提交。
但是我怎么能用 Git 命令来做呢?Git是否提供这样的工具?
解决方案
从你的分支,假设你的遥控器被命名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
)
推荐阅读
- python - Python排序嵌套字典
- hockeyapp - 使用 API(令牌)从应用中心/曲棍球应用下载最新的工件
- linux - 在 Linux 上通过 OpenSSH 公钥身份验证使用 Powershell 更新 DNS
- javascript - 触发 3cx-clicktotalk WordPress 插件的 3cx 调用按钮
- android - 尝试使用 maven 和插件 com.jayway.maven.plugins.android.generation2 构建 android 应用程序时出现 NullPointerException
- sql - 将列名的文本值转换为查询中的列
- javascript - 如何为开放图层中的开放街道地图使用不同的主题?
- java - 列表上的 Selenium 非确定性循环
- java - Eclipse:导出具有依赖项的 java 库
- java - 声明和直接归因之间的区别