我对git checkout [<tree-ish>] [--] <pathspec>…..
的所作所为感到困惑
我的仓库。包含文件夹,我有一个旧分支,可称为 old_branch 。我想将一个文件夹从 old_branch 合并到我的开发人员
我这样切换到开发人员:
git checkout dev
然后我想将旧分支中的一个文件夹合并到dev
git checkout <old_branch> --myfolder
问题:它是否与我的开发人员合并,还是只是替换了old_branch中的代码并将其标记为“合并”
自从我尝试进行git checkout -b new_branch
,先提交然后进行git merge dev
以来,它告诉我没有更改(最新)。
在检查代码时,我看到许多不应该发生的删除操作。
更新1 如果我之前不清楚,请原谅,谢谢您的回答。 我想将当前树(dev)中一个子文件夹的内容与树中的一个子文件夹(old_branch)的内容合并(合并更改)
更新2 好像我问错了一个问题。真正的问题应该是如何在mono-repo设置中合并子文件夹。我认为没有自动的方法可以做到这一点。我最终是手工完成的。
答案 0 :(得分:2)
它是否与我的开发人员合并,或者只是替换old_branch中的代码并将其标记为“合并”
git checkout
都不做这些事情。
我想将旧分支中的一个文件夹合并到dev
您的方向正确,但是语法有些混乱。 git merge
通常用于组合从两个或多个提交到单个新提交的更改(除非是快速进行,但这在这里并不重要)。如果我理解正确,您想用一个提交中的同一文件夹版本替换一次提交中存在的文件夹的一个版本(即分支dev
上的最新提交) (即在old_branch上)。这是您需要执行的命令序列,并带有解释:
dev
的分支git checkout dev
git checkout old_branch -- myfolder
。请注意,这不会修改存储库中的已提交版本。在git-speak中,我们说HEAD
仍指向同一提交。现在,我们需要将对myfolder所做的更改提交到分支dev
,以“保存”在工作区中。由于checkout
会自动将签出的文件/文件夹添加到暂存区,因此我们只需要提交更改:
git commit -m 'change myfolder to version on branch old_branch'
您可以通过运行dev
在分支git log
上看到新的提交。最高的提交应该在上面有提交消息。
[编辑1]:
@JavaHead This post可能会让您感兴趣。如果myfolder
上的old_branch
的文件在dev
上的同一文件夹中不存在,并且您希望将它们添加到dev
中,只需签出所需文件从old_branch
到myfolder
上的dev
并提交,就像上面的流程一样。如果您的意思是每个分支都有不同版本的 same 文件,那么您可能需要git checkout -p old_branch -- <file-to-combine>
。这将向您显示每个分支中对该文件所做的更改的差异,并让您选择要单独进行哪些更改。