Git使用上的一些理解

序列化操作

git merge <branch>
git rebase <branch>
git cherry-pick <commit>
...
这些都是git把commit一个个地在当前分支上重演,整个过程可能涉及到不止一个commit应用在当前分支上,所以这是一个序列化的操作行为。
当某个commit在当前分支上的replay发生冲突的时候,就需要解决冲突;
当冲突解决完成之后,就可以使用git merge/rebase/cherry-pick --continue命令来继续完成这个序列化过程,直到结束。

好用的git status -s

使用git status -s来查看工作区状态要比没用-s参数的要方便,但是需要先了解这个简洁版工作状态的表达方式:
一般我们看到的是 XY PATH 这样形式的一个状态表达,这个状态值有如下几种:

  • 空白 表示无改动
  • M 表示改动
  • A 表示添加
  • D 表示删除
  • R 表示重命名
  • C 表示拷贝
  • U 表示已更新到索引区但是未合并
  • ? 表示还没添加到git库中的文件
  • ! 表示已被忽略的文件
    上述列表就是X/Y的可能取值,那么在无冲突的情况下,XY分别指代索引区和工作区的状态;在有冲突的情况下,XY就分别指代冲突双方的各自状态了,其中X是我们,Y是他们。
    这里举例表述下有冲突的情况下,XY的部分组合:
  • AU 我们添加了文件
  • UD 他们删除了文件
  • DD 双方都删除了文件
  • UU 双方都修改了文件
    除了UU的情况外,其他情况都是可以通过git add/rm搞定;而UU的话,需要手工去解决冲突,然后git add把修改加入索引区,这样才算是解决完了冲突。

关于合并

merge是一件痛苦的事情,尤其是两边的内容有很多不同的时候,这时候可以尝试下使用merge的耐心算法,说不定可以有效的减少merge的痛苦
git merge --strategy-option=patience

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,660评论 1 26
  • 是该把自己的心掏出来清洗一下, 爸妈养育了我三十多年, 而我,至今却还让爸妈操烦、担忧; 是该拿把镜子好好的照照自...
    Ahxin阅读 954评论 2 0
  • 昨天在京东上买的,今天中午收到后就开始反省自己的懒惰。 很荣幸这本书中反复强调“简书”好奇的我就下载用了,记录着自...
    羊侠阅读 99评论 0 0
  • 八月五日 今天上午有点累,因为昨晚睡太晚了,一直在写观察日记,写到了凌晨两点。我的思维整理起来有点慢,所以耽误了睡...
    罂粟疯了阅读 253评论 0 1