如何从一个 git 分支获取所有文件,并将它们放入当前分支而不合并?

如何从一个 git 分支获取所有文件,并将它们放入当前分支而不合并?

我不想提交任何内容。我只想从不同的分支中获取所有文件,并用这些文件替换我正在处理的所有当前文件,而这根本不会改变我当前的分支,本质上就像合并一样,但不创建合并状态。

最终结果与签出不同的分支、复制文件、然后返回原始分支并粘贴在它们之上相同。

编辑:我尝试将分支合并到工作树中以使其处于合并状态,然后执行 git reset originalbranch,这几乎有效,但它留下了所有有冲突的文件和不同的注释......

编辑2:刚刚意识到我在 SU 上而不是 SO 上......

答案1

这似乎可以解决问题:

git merge otherbranch --no-commit --no-ff -X theirs
git reset currentbranch

由于“--strategy=theirs”不是有效的策略,因此需要“-X theirs”。

“--no-commit --no-ff” 阻止合并,只将文件留在工作树中

重置将取消合并状态,但保留文件。

答案2

最终结果与签出不同的分支、复制文件、然后返回原始分支并粘贴在它们之上相同。

选项1

这正是 的情况checkout。我们倾向于认为查看仅用于获取要处理的分支,但也可用于替换当前分支中的文件。假设您想用的内容替换的内容currentbranchotherbranch例如复制 otherbranch 的所有文件并将其粘贴到 currentbrach),那么

git checkout currentbranch
git checkout otherbranch .

该命令表示从 otherbranch 签出所有文件 (.) 并将它们放在 currentbranch 之上。请注意,与复制/粘贴类比不同,这还会删除 currentbranch 中不存在的任何文件。缺点是您将丢失来自 otherbranch 的所有提交历史记录其他分支

选项 2

以下序列将:

  • 项目清单
  • 使内容当前分支相同其他分支
    • 例如git diff currentbranch otherbranch不会显示任何变化
  • 保留提交历史(其他分支提交将被添加到当前分支
  • 将更改显示为合并(以便可以恢复)
  • 离开其他分支不变(如果不需要,则跳过创建临时分支)
   git checkout otherbranch
   git checkout -b temp-merge-other
   git merge currentbranch -s ours
   git checkout currentbranch
   git merge temp-merge-other --no-ff
   git diff otherbranch      # no difference
   git log           # commit history from dev is included
   git branch -D temp-merge-other

答案3

如果您只是想将另一个分支的所有文件带到您的工作目录,您可以使用checkoutgit 子命令简单地将它们检出。

git checkout target # checkout my local branch
git checkout otherbranch -- .

子命令checkout还允许您从另一个分支检索文件。例如从分支git checkout otherbranch -- file.txt检索。使用指示 Git 从给定分支检索完整内容。file.txtotherbranch.

答案4

您的分支可能可以这样做git rebase。这会合并更改,而不会创建新的合并提交。只有当两个分支之间没有冲突的更改时,它才有效。

相关内容