git
2019-04-10 本文已影响0人
cf6bfeab5260
原理简诉
直接上图
2429e4d2661e60027537aea0077f6e40.png
这个图很清楚地表明了git提交的整个过程:
- 开发者在工作区(本机)编辑代码,通过add命令提交到了暂存区(本机)。
- 通过commit命令提交到了版本库(本地)。
- 通过push命令提交到了远程仓库(远程)。
那这里本地的三个区对应了git三个术语:
工作区 - Working Copy
暂存区 - Index(stage area)
本地版本库 - HEAD
常见操作
- 从远程仓库拉代码:
git clone
仓库代码URL - 查看状态:
git status
- 查看日志:
git log
- 添加修改到暂存区:
git add
- 添加修改到本地版本库:
git commit
- 添加修改到远程仓库:
git push
- 比较差异:
git diff
(工作区 vs 暂存区)、git diff head
(工作区 vs 版本库)、git diff --cached
(暂存区 vs 版本库) - 重置(已经commit了):
git reset
,这个命令的本质是把HEAD重新指向一个指定的commit。那Working Copy和Index有什么影响呢? 这个由后面跟的参数决定:-
git reset --mixed
:这个是默认参数。会把Index也重置到和HEAD一样,但Working Copy保持不变。也就是说你执行这个命令后,就可以把你回滚的部分,重新修改然后 add --> commit。 -
git reset --soft
: Index和Working Copy都不会变。也就是只是把你的commit操作回滚了。add操作没有回滚。 -
git reset --hard
:Index和Working Copy都会跟着变化。这个操作需要特别慎重,因为它会丢掉你回滚的代码,只有当你非常确定中间提交的那部分代码没用了的时候才用得到。
-
- 重置(已经add但是没有commit):
git checkout 文件名
。 - 重置(已经push了): 通过
git log
找到需要回滚到的版本号,通过git reset –-soft
版本号 将本地commit回滚回去。 通过git push 分支名 –-force
强制提交当前版本到远程仓库。 - 切换分支:
git checkout
分支名