FAQ
这个地方,我会记录我在使用git或github中遇到的一些问题。
1. 在git bash 中如何退出vim编辑器?
2017/1/18
问题描述:
在使用git commit
git merge --no-ff xxx
等指令时会跳转到一个“编辑器”(vim编辑器),然后我发现我没法编辑,也不知道怎么退出,今晚(2017/1/18 20:54:21 )搞清楚了这个问题。
问题解答:
其实按 o i a 都可以进入编辑模式,接下来你可以对内容进行修改,修改好后
方法一:按住Esc再按两下大写Z (注意是大写) 就可以退出了,这种情况下是保存并退出。
方法二:按Esc退出编辑模式,如果想退出编辑器,按Shift+;(其实就是输入个 “:" 冒号 ) ,接下来可输入q!(不保存并退出)或 wq!(保存并退出)。
以上两种方法都亲测有效。
嗯 就是这样。
2.git merge --no-ff 是什么意思?与git merge有什么区别?与 git merge --squash 有什么区别?
2017/1/18
问题描述:
之前因为遇到上一题的缘故,我在合并的时候一直用git merge
于是在看graph的时候 发现和我想象中的不一样,分支去哪了?
问题解答:
--no-ff
指的是强行关闭fast-forward方式。
fast-forward就是直接使用git merge
的方式,当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit
git merge --squash
是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash
进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。
总结:
--no-ff
:不使用fast-forward方式合并,保留分支的commit历史
--squash
:使用squash方式合并,把多次分支commit历史压缩为一次
看下图就很明白了
本题解答参考 segmentfault