Git checkout tree-ish ,帮我看看合并是否发生

Git checkout tree-ish , help me figure out if merge happens

我对 git checkout [<tree-ish>] [--] <pathspec>…​.. 所做的事情非常困惑

来自 git documentation

我的回购。包含文件夹,我有一个旧分支,我们称之为 old_branch。我想将 old_branch 中的一个文件夹合并到我的 dev

我像这样切换到我的开发人员:

git checkout dev

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

git checkout <old_branch> --myfolder

问题:它是否与我的 dev 合并,或者只是替换我的 old_branch 中的代码并将其标记为 "merged"

自从我尝试做 git checkout -b new_branch、提交然后做 git merge dev 之后,它告诉我没有任何变化(最新)。

检查代码时,我看到很多不应该发生的删除。

更新 1 我想合并(合并更改)我当前树 (dev) 中的一个子文件夹的内容与我在树中的一个子文件夹的内容 (old_branch)

更新 2 看来我问错了问题。真正的问题应该是如何在单一回购设置中合并子文件夹。我不认为有一种自动化的方法可以做到这一点。我最终手工完成了。

Does it do a merge with my dev , or simply replaces code from my old_branch and marks it as "merged"

git checkout 两者都不做。

I wanted to merge one folder from my old branch to dev

你走在正确的轨道上,但语法有些混乱。 git merge 通常用于 合并 来自两个或多个提交的更改到一个新的提交中(除非它是 fast-forward,但这在这里并不重要)。如果我理解正确,您想 replace 一次提交中存在的文件夹的一个版本(即分支 dev 上的最新提交)与同一文件夹的一个版本不同的提交(即 old_branch)。这是您需要执行此操作的命令序列,并附有解释:

  1. 首先,确保我们在分支 devgit checkout dev
  2. 将暂存区和工作区中我的文件夹的版本替换为old_branch中的版本:git checkout old_branch -- myfolder。请注意,这不会修改存储库中的已提交版本。在 git-speak 中,我们说 HEAD 仍然指向相同的提交。
  3. 现在我们需要 "save" 将我们对工作区中的 myfolder 所做的更改提交到分支 dev。因为 checkout 自动将 checked-out files/folders 添加到暂存区,所以我们只需要提交更改:

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

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

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