git理解之超薄笔记

简介: git理解之超薄笔记

一、git结构原理和基本操作

关于git是什么,如何牛笔就不多说了,如下直接借用一下图片,上操作命令图。使用git status这个命令,它可以指引你该干嘛干嘛,确定你的工作目录是否干净。干净的意思就是和暂存区还有本地仓库保持一致。
image.png

原理图


小乌龟上的命令都理解了么?
image.png

打开log右键还有部分命令


image.png

参考图

二、指针的移动

Branch指针和HEAD指针。
image.png

将指针从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也可以另外进行设置。

相关阅读:

GIT版本管理工具教程

git协作

变基理解

彩蛋:

借网络图说明下 变基的理解(感谢原作者)。
image.png
image.png
image.png

相关文章
|
11月前
|
Shell 开发工具 git
Git笔记(三)---- Git分支操作
Git笔记(三)---- Git分支操作
106 0
|
2月前
|
存储 XML Shell
Git笔记
Git笔记
22 0
|
2月前
|
开发工具 git
git使用笔记-修改url并与远端库合并
git使用笔记-修改url并与远端库合并
15 1
|
9月前
|
Shell 开发工具 git
[笔记]Git 介绍以及入门基本功能(一)
[笔记]Git 介绍以及入门基本功能
|
2月前
|
Shell 开发工具 数据安全/隐私保护
git笔记
git笔记
40 0
|
9月前
|
Shell 开发工具 git
[笔记]Git 介绍以及入门基本功能(二)
[笔记]Git 介绍以及入门基本功能(二)
|
10月前
|
Shell 网络安全 开发工具
git版本管理加合并笔记
git版本管理加合并笔记
|
11月前
|
安全 程序员 开发工具
代码版本管理笔记 | Python 程序员也应该会的 Git 分支操作
代码版本管理笔记 | Python 程序员也应该会的 Git 分支操作
155 0
|
11月前
|
数据采集 安全 JavaScript
代码版本管理笔记 | Python 程序员也应该会的 Git 进阶操作
代码版本管理笔记 | Python 程序员也应该会的 Git 进阶操作
138 0
|
11月前
|
数据采集 缓存 安全
代码版本管理笔记 | Python 程序员也应该会的 Git 基础操作
代码版本管理笔记 | Python 程序员也应该会的 Git 基础操作