我不想提交任何内容。我只想从不同的分支中获取所有文件,并用这些文件替换我正在处理的所有当前文件,而这根本不会改变我当前的分支,本质上就像合并一样,但不创建合并状态。
最终结果与签出不同的分支、复制文件、然后返回原始分支并粘贴在它们之上相同。
编辑:我尝试将分支合并到工作树中以使其处于合并状态,然后执行 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
。我们倾向于认为查看仅用于获取要处理的分支,但也可用于替换当前分支中的文件。假设您想用的内容替换的内容currentbranch
(otherbranch
例如复制 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
如果您只是想将另一个分支的所有文件带到您的工作目录,您可以使用checkout
git 子命令简单地将它们检出。
git checkout target # checkout my local branch
git checkout otherbranch -- .
子命令checkout
还允许您从另一个分支检索文件。例如从分支git checkout otherbranch -- file.txt
检索。使用指示 Git 从给定分支检索完整内容。file.txt
otherbranch
.
答案4
您的分支可能可以这样做git rebase
。这会合并更改,而不会创建新的合并提交。只有当两个分支之间没有冲突的更改时,它才有效。