我已经用git做了几个星期的实验了,虽然我对我现在能用它做的事情很满意,但关于rebase,我仍然有一些行为无法解释。
我发现这张图片似乎很好地理解了这个概念:

但我似乎真的不能让它以这种方式工作;以下是我所做的:
我在一个文件夹中创建了一个file.txt,git初始化了它,并提交了它。然后我添加了一行' one ',commit,新行'two‘commit,'three'...
然后我创建了一个新的分支'feature',添加了5个和6个。
现在如果我使用git checkout master,git rebase功能,事情就像上面的图片一样。
但后来我决定重置并做一个交互式的rebase:
git rebase -i特性:在nano中,我只有noop而不是我的提交列表。如果继续使用它,它仍然可以工作,但是为什么我不能决定在这种情况下重新编写/挑选/跳过提交?
现在,如果我重置并执行合并,我看不到任何差异:
--合并
(on master)
git merge feature
$ git log --oneline --all
ec382b3 (HEAD -> master, feature) five
d32ed5c four
1499f19 three
24f93bc two
544c929 one
c78eaba first push
$ git branch -a -v
feature ec382b3 five
* master ec382b3 five- rebase
(on master)
git rebase feature
$ git log --oneline --all
ec382b3 (HEAD -> master, feature) five
d32ed5c four
1499f19 three
24f93bc two
544c929 one
c78eaba first push
$ git branch -a -v
feature ec382b3 five
* master ec382b3 five最后但并非最不重要的一点是,如果我在master上重新设置特征的基址,然后
$git rebase -i HEAD~3
pick 1499f19 three
pick d32ed5c four
pick ec382b3 five很好,我可以选择我的提交或删除它们来跳过它们,但是,记住每个提交有一行,假设我想跳过第四行/提交:
冲突:
one
two
three
<<<<<<< HEAD
=======
four
five
>>>>>>> ec382b3... five首先,这怎么会是冲突呢?以前的提交有
one
two
three所以没有冲突,head实际上什么都没有,但更重要的是,即使4和5是单独的提交,在我删除它的提交后,4仍然显示?我以为git保存了更改而不是整个文件...?
这是我不理解的几种行为,谢谢。
发布于 2019-06-20 00:50:15
冲突是因为您在每次提交时都要在文件末尾编写内容。这使得git在你精挑细选(rebase的基础)时很棘手。尝试执行相同的操作,但在文件的中间( 20行)。绕过第11行),然后它就不会失败。
https://stackoverflow.com/questions/56672303
复制相似问题