正常我们使用git,比如git add ,git commit , git push这些完成个人的代码暂存、修改、提交和推送操作。
在多人协作下,你提交的文件修改可能对方也在修改同一个文件,并且比你先修改完先push到远程。这时候你不得不pull下别人的分支,在重新push,如果有confilict,还需要手动修改冲突文件,该是你的保留,不想要的删除,最终再提交。
这些是最基本的场景,但是你有没有遇到过以下棘手的场景:
当然你可以说先找到别的同事提交之前的那个版本,然后在branch一个分支,merge上你的代码。但是问题是如果master已经提交了很多个commit,而别的同事提交的那个暂时不想要(比如说他提交的是一个大功能模块,上线可可能需要比较谨慎,所以这次不发表),其他的还是要一起发布。
--C----D---- some commit must kick off
/ \<merge>
----A----B----C----D----E master
\
--O----P----Q my branch
\
--B----E release brance
这个时候如果想要制造出像release branch那样子的提交。可以这么做:
可以先从my branch中rebase一个release branche。然后git cherry-pick B, git cherry-pick E即可。其中B和E是commit log md5串。这个commit id可以通过git log查看,这个commit id是一串很长的字符串,但是其实只需要前面几个字母组成的字符串,只要这个字符串是能让git联想到唯一的commit id就可以。需要注意的是cherry-pick保持原来的B和E提交顺序。
和SVN不一样,Git的commit id
不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,因为Git是分布式的版本控制系统,多人在同一个版本库里工作,如果都用1,2,3……作为版本号,那肯定冲突了。
git初学者或者从svn刚切换到git的使用者,一开始就敲复杂的命令可能会有点困难。这时候如果使用跟tortoise svn类似的git软件,会比较好上手git。
git log日志每条记录有三栏,第一栏是分支图,第二栏是代表提交是否修改、新增和删除文件。第三轮是git分支(或tag)加上本commit的提交日志。
四方块代表merge,圆形代表一个提交。每条横线记录代表着一个事件。形状记录了是什么事件,merge或者哪个版本提交commit事件。
git log的Walk Behaviour里面有一堆按钮:注意下如果只是想看分支间的关系,可以把compressed graph,而如果还想看清每个分支的提交,就把这个按钮关掉。
由于log显示的是所有分支,所有需要在第三栏,messege那栏有显示当次更改涉及的分支或者tag。git log上有tag比如这种,
还有branch
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。