git:分支删除了一些提交
我今天的处境很奇怪。。我会尝试重现我认为发生的事情 我想将一个推测性更改(对git:分支删除了一些提交,git,git-svn,branch,Git,Git Svn,Branch,我今天的处境很奇怪。。我会尝试重现我认为发生的事情 我想将一个推测性更改(对a_文件)移动到一个新分支,并在没有它的情况下继续处理主分支 在带有a_文件和b_文件脏的母版上,我做了: git checkout -b saved_feature git commit a_file -m "Putting this modification on a different branch" git checkout master 在这一点上,git抱怨说b_文件很脏——这是一个警告信号,但我没有认
a_文件
)移动到一个新分支,并在没有它的情况下继续处理主分支
在带有a_文件
和b_文件
脏的母版上,我做了:
git checkout -b saved_feature
git commit a_file -m "Putting this modification on a different branch"
git checkout master
在这一点上,git抱怨说b_文件很脏——这是一个警告信号,但我没有认出它
我还在使用branchsaved_功能,所以我想我可以:
git stash save
git checkout master
到目前为止还不错
git stash pop
在这一点上,我得到了一个错误,即无法合并存储
我检查日志-出于某种原因,有大约6天的提交时间最初提交给master
分支,但不在日志中。这些提交仅在我创建的新分支上进行(我检查了是否已将它们提交到其他分支)
在检查了saved_功能的日志之后,我可以看到它们都在那里
发生了什么事
我下一次试了master
:
git merge saved_feature
但快进方案失败了,引发了大量冲突
我还使用git svn将更改推送到外部存储库,因此我再次执行了以下操作:
git svn rebase
这恢复了以前从svn推送的一些提交
然后,我从saved_功能
分支中挑选了剩余的最新提交,
然后我做了一个git stash pop
,修复了本应自动合并但未合并的冲突,并最终使我的master
保持原来的状态
在这个令人遗憾的故事中,有人能指出我的心智模型和git的分道扬镳之处吗?我怎样才能避免再次陷入这样的困境?你可能在过去的6天里工作在一位大师的祖先那里。
(感谢您提出最后一部分:它可能解释了一切)
假设你有:
x--x--x--x <- master
^
|
T1 (tag)
现在,此时的git checkout-b saved_功能将创建一个分支,其中包含最近6天的提交:
x--x--x--x <- master
^\
| -y--y--y--y--y--y--a <- saved_feature (a committed, b dirty)
|
T1(tag)
x--x--x我绝对建议使用git的bash completion中的\uuuGit\uPS1
函数(也使用completion!),而不是那篇博文中自己开发的解决方案。@Jefromi:我同意。至少那篇博文提到了\uu git\u ps1
功能。(尽管另一个“国产”的也不错:)为什么将保存的功能合并到主控中可能是非快进合并且存在冲突的一个可能解释:OP在主控端的某个祖先处分离了他的头(例如,调查旧快照),他的新更改与主控端的状态存在冲突(例如,修复在主控端已经修复但方式不同的bug)@Chris:非常正确;我已经在我的回答中包含了这个场景。谢谢。嗯,我很确定我没有通过检查旧的提交来分离我的头部,我所做的唯一我能想象的可以分离头部的事情是git svn rebase
x--x--x--x <- master
^\
| -y--y--y--y--y--y--a <- saved_feature (a committed, b dirty)
|
T1(tag)