一、git结构原理和基本操作
关于git是什么,如何牛笔就不多说了,如下直接借用一下图片,上操作命令图。使用git status这个命令,它可以指引你该干嘛干嘛,确定你的工作目录是否干净。干净的意思就是和暂存区还有本地仓库保持一致。
原理图小乌龟上的命令都理解了么?
打开log右键还有部分命令二、指针的移动
Branch指针和HEAD指针。
将指针从testing切换回master,head指针回指向master分支指针,也就是说会回到一个旧版本。git checkout命令切换到某个commit中(即HEAD指向某个commit),head指针游离(即不在master上,这种情况下会被提醒指针不在分支上,是比较危险的),则commit时,head迁移,master不会跟着移动。
三、回滚操作
回滚操作总结:
git reset --hard 撤销到某次提交版本(移动head和master指针)(因为撤销后本地head比远程的旧,push会报错,要强制push上去);
git revert 撤销某次提交(commit)。撤销其中的一个提交而不是回到某个版本。
四、merge和rebase
merge和rebase合并HEAD指针的变化。 merge是合并分支,rebase是对比合并分支并将commit一一合并,从而用新的commit去覆盖。这样对其他协作者非常不利。
五、冲突
冲突发生的场景:
1.A,B同时pull了a文件;A改了a文件的第二行,push;B也本地改了a文件的第二行,此时想要commit,于是先pull,发生冲突。
2.同上。B也本地改了a文件的第二行,此时先commit,然后push,此时提示先pull;pull时发生冲突。先commit容易丢失版本,因为容易基于旧版本提交而把别人的代码覆盖丢失。应该要注意把被人的代码也commit。
3.其他入合并分支的冲突。
历史问题: 先commit还是先pull?先commit会导致冲突处理不当别人提交的版本丢失问题,先pull会导致本地修改的被覆盖问题?按实际抉择吧,先commit会对本地改动保险一点个人觉得,不然很容易白写,除非先暂存区一下呢?但是动手每次开发之前先pull一下最新的这是必须的。
解决方法:
1.将本地的修改直接去掉(git checkout head .),然后pull最新的,然后再改。最简单粗暴的办法。也可以git revert 撤销某次提交(commit)。
2.先将改动放入暂存区,pull最新的之后,取回暂存区的代码,解决冲突后提交。git stash->git pull->git stash pop。
六、tag
通常在发布软件的时候打一个tag,可以基于某个commit创建。tag会记录版本的commit号,方便后期回溯(reset回滚或者导出版本包)。推送本地所有tag到远程,使用git push origin --tags。
七、远程连接方式
在管理Git项目上,很多时候都是直接使用https url克隆到本地,当然也有有些人使用SSH url克隆到本地。这两种方式的主要区别在于:使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处。而使用SSH url克隆却需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者。否则你是无法添加SSH key的,另外ssh默认是每次fetch和push代码都不需要输入账号和密码,如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置。
相关阅读:
网友评论