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

pha*_*zei 11 git

我不想犯任何事。我只想从不同的分支中获取所有文件并用这些文件替换我正在处理的所有当前文件,而它根本不会更改我当前的分支,本质上就像合并,但不创建该合并状态。

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

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

EDIT2:刚刚意识到我在 SU 而不是 SO ......

pha*_*zei 11

这似乎可以解决问题:

git merge otherbranch --no-commit --no-ff -X theirs
git reset currentbranch
Run Code Online (Sandbox Code Playgroud)

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

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

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


Bri*_*HVB 5

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

选项1

这正是checkout. 我们倾向于认为checkout仅用于让分支工作,但它也可以用于替换当前分支中的文件。假设你想currentbranchotherbranch(例如复制otherbranch的所有文件并将它们粘贴到currentbrach)的内容替换的内容,那么

git checkout currentbranch
git checkout otherbranch .
Run Code Online (Sandbox Code Playgroud)

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

选项 2

以下序列将:

  • 项目清单
  • 使内容currentbranch相同otherbranch
    • 例如git diff currentbranch otherbranch不会显示任何变化
  • 保留提交历史(其他分支提交将被添加到当前分支
  • 将更改显示为合并(以便可以还原)
  • 离开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
Run Code Online (Sandbox Code Playgroud)