所以我正在使用Git并尝试创建一个新的分支,我可以删除我的存储内容,并支持我在这样做时发生的任何合并冲突中的存储。我正在做以下事情:
git checkout -b *newbranchname*
git stash apply
它告诉我文件中的合并冲突。如何在终端中进行此操作并在任何冲突中自动支持存储而无需专门处理它们?
答案 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 bag的w
和git 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
看看你是否喜欢这个结果。