想要将我的存储应用到一个新分支并用我的存储中的内容覆盖其中的所有内容

Want to apply my stash to a new branch and override everything in it with what is in my stash

所以我在 Git 工作并尝试创建一个新分支,我可以在其中删除我的存储内容,并在这样做时发生的任何合并冲突中支持我的存储。我正在执行以下操作:

git checkout -b *newbranchname*
git stash apply

它告诉我文件中存在合并冲突。我怎样才能在终端中执行此操作并在任何冲突中自动支持存储而不需要专门处理它们?

在我看来,最简单的方法是 "don't do that" :-)

相反,将您的 git stash 内容变成它自己的一个分支:

git stash branch newbr

现在您有一个新分支 newbr,索引已准备好提交(如果您已将项目 git add 编辑到索引)并且工作树已根据存储修改,准备就绪被 git add 教育和承诺。如果您之前已经仔细添加了内容,请继续并立即提交,然后添加其他所有内容并再次提交。如果没有,现在就添加所有内容并提交。现在你有了一个新分支 newbr,上面有一个或两个提交——多少取决于你刚刚做了多少 git commit——它与你做 git stash.

您现在可以从不同的起点创建一个不同的新分支,如果这是您想要的,并使用 git cherry-pick 带来这些提交,然后丢弃新分支。或者,您可以使用 git rebase -i(使用 <upstream> 和可选的 --onto 参数)以通常的 rebase 方式将提交复制到其他地方,一旦完成复制就丢弃原始提交。或者,如果newbr的现有起点毕竟是你想要的,那么你已经准备好了。


综上所述,如果您真的只想检查冲突文件的工作树版本,完全忽略这些文件的当前版本,您可以这样做很容易。要记住的是参考名称 stash (或 stash@{<em>N</em>} 对于某些数字 N ) 指的是 git stash 在保存 stash bagiw 提交时所做的 work-tree 提交。因此:

git checkout stash -- path/to/file

提取 path/to/filew 版本,通过索引写入(因此解决任何冲突的合并),完全忽略该文件的 HEAD 版本。

(文件的 index 提交版本在 stash^2 中,如果有 untracked/all-files 提交,这些文件在 stash^3 中,因为我在 that other answer 中注明。虽然 w 在技术上是合并提交,但它不是正常的合并,尤其是所有文件提交非常不寻常,因为它只有 那些文件,以及 index/work-tree 个文件中的 none 个。)

你可以试试

git merge-recursive --theirs stash^ -- @ stash

看看你是否喜欢这个结果。