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

时间:2016-05-27 00:21:27

标签: git git-stash git-checkout

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

git checkout -b *newbranchname*
git stash apply

它告诉我文件中的合并冲突。如何在终端中进行此操作并在任何冲突中自动支持存储而无需专门处理它们?

2 个答案:

答案 0 :(得分:2)

在我看来,最简单的方法是“不要那样做”: - )

相反,将您的git stash内容转换为自己的分支:

git stash branch newbr

现在你有了一个新的分支newbr,索引已准备好提交(如果你有索引的项git add)并且工作树按照存储进行了修改,准备好了git add编辑并承诺。如果您之前已经仔细添加了内容,请继续提交,然后再添加其他内容并再次提交。如果没有,只需添加所有内容并提交。现在你有一个新的分支newbr,其上有一两个提交 - 多少取决于你刚刚做了多少git commit - 当你执行{{{{}时,它与任何提交相关联1}}。

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

所有这一切,如果你真的想要查看冲突文件的工作树版本,完全忽略这些文件的当前版本,你可以很容易地做到这一点。要记住的是,引用名称newbr(或stash对于某些数字 N )是指stash@{N} ork-tree提交{{1}保存stash bagwgit stash次提交时生成的。因此:

i

提取w git checkout stash -- path/to/file 版本的w,通过索引编写(因此解决任何冲突的合并),完全忽略该文件的path/to/file版本。

HEAD ndex-commit版本的文件位于i,如果有未跟踪/全文件提交,那些文件位于stash^2,正如我在that other answer。虽然stash^3在技术上是合并提交,但它不是正常合并,特别是所有文件提交非常不寻常,因为它只有 那些文件,并且没有索引/工作树文件。)

答案 1 :(得分:0)

你可以尝试

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

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