Git操作流程序列图及说明
当作者看到这幅图的时候,只有惊叹与佩服啊,这张图看着虽然简单,但是涵盖了git的基本原理与常用的操作。要说缺憾,就是缺少tag相关的描述。
简单来说,git对应的4个区:
- 工作区(
Working Area
) - 暂存区(
Stage
) - 本地仓库(
Local Repository
) - 远程仓库(
Remote Repository
)
由此对应3个步骤(修改提交的步骤):
git add . --把所有文件放入暂存区; git commit -m "说明" --把所有文件从暂存区提交进本地仓库; git push --把所有文件从本地仓库推送进远程仓库。
另外,由以上4
个区,进入每一个区成功之后会产生一个状态,再加上最初始的一个状态,一共是5
种状态。以下我们把这5
种状态分别命名为:
- 未修改(
Origin
) - 已修改(
Modified
) - 已暂存(
Staged
) - 已提交(
Committed
) - 已推送(
Pushed
)
修改查看与对应撤销方式
1、工作区到缓存区之前
在 git add . 之前,可以通过下述命令,查看“已修改,未暂存”的修改:
git diff
撤销修改:
git checkout .
或
git reset --hard
2、暂存区到本地仓储前
在提交到暂存区之后(执行 git commit -m "提交说明" 之前,git add . 之后),可以通过下述命令,查看“已暂存,未提交”的修改:
git diff --cached
撤销修改:
git reset
git checkout .
或
git reset --hard
3、本地到远程仓储前
在提交到暂存区之后(执行 git push original *** 之前 git commit -m "提交说明" 之后),可以通过下述命令,查看“已提交,未推送”的修改:
git diff master origin/master
撤销修改:
git reset --hard origin/master
4、已提交远程后
git push之后,
撤销修改:
git reset --hard HEAD^
git push -f
由于本地仓库
和远程仓库
是等价的,只需要先恢复本地仓库
,再强制push
到远程仓库。(只限于当前远程,仅自己这次提交,别人未跟着提交合并或已经pull了这次提交的代码)
保险起见:
使用 git revert 回滚代码,但是这个操作有个副作用:只要碰到merge就会需要人工判断。
参考自:https://www.fengerzh.com/git-reset/