Git结帐树状,帮助我找出合并是否发生

时间:2019-07-09 21:16:54

标签: git git-merge git-checkout

我对git checkout [<tree-ish>] [--] <pathspec>…​..的所作所为感到困惑

来自git documentation

我的仓库。包含文件夹,我有一个旧分支,可称为 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设置中合并子文件夹。我认为没有自动的方法可以做到这一点。我最终是手工完成的。

1 个答案:

答案 0 :(得分:2)

  

它是否与我的开发人员合并,或者只是替换old_branch中的代码并将其标记为“合并”

git checkout都不做这些事情。

  

我想将旧分支中的一个文件夹合并到dev

您的方向正确,但是语法有些混乱。 git merge通常用于组合从两个或多个提交到单个新提交的更改(除非是快速进行,但这在这里并不重要)。如果我理解正确,您想用一个提交中的同一文件夹版本替换一次提交中存在的文件夹的一个版本(即分支dev上的最新提交) (即在old_branch上)。这是您需要执行的命令序列,并带有解释:

  1. 首先,确保我们位于dev的分支git checkout dev
  2. 用暂存区和工作区中的myfolder版本 替换为old_branch中的版本:git checkout old_branch -- myfolder。请注意,这不会修改存储库中的已提交版本。在git-speak中,我们说HEAD仍指向同一提交。
  3. 现在,我们需要将对myfolder所做的更改提交到分支dev,以“保存”在工作区中。由于checkout会自动将签出的文件/文件夹添加到暂存区,因此我们只需要提交更改:

    git commit -m 'change myfolder to version on branch old_branch'

  4. 您可以通过运行dev在分支git log上看到新的提交。最高的提交应该在上面有提交消​​息。

[编辑1]: @JavaHead This post可能会让您感兴趣。如果myfolder上的old_branch的文件在dev上的同一文件夹中不存在,并且您希望将它们添加到dev中,只需签出所需文件从old_branchmyfolder上的dev并提交,就像上面的流程一样。如果您的意思是每个分支都有不同版本的 same 文件,那么您可能需要git checkout -p old_branch -- <file-to-combine>。这将向您显示每个分支中对该文件所做的更改的差异,并让您选择要单独进行哪些更改。

相关问题