相关文章推荐
彷徨的充电器  ·  C++ ...·  2 年前    · 
闷骚的冲锋衣  ·  Mac M1芯片安装 Numpy ...·  2 年前    · 
坏坏的雪糕  ·  UE4 C++ ...·  2 年前    · 
来理解下 Git 工作区、暂存区和版本库概念,可以更好的理解以下的还原操作。
* 工作区:就是你在电脑里能看到的目录
* 暂存区:英文叫 stage 或 index。 一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
* 版本库:工作区有一个隐藏目录 .这个不算工作区,而是 Git 的版本库。
详解的流程图如下:
二、git常用命令详解
1.git status:
查看工作区代码相对于暂存区的差别
2.git add .:
将当前目录下修改的所有代码从工作区添加到暂存区,.代步当前目录
3.git commit -m 'message':
将缓存区的内容添加至本地仓库
4.git pull orgin master:
先将远程仓库master中的信息同步到本地仓库master中
5.git push orgin master:
orgin是远程主机,master表示是远程服务器上的master分支和本地分支重名的简写,分支名是可以修改的
6.git checkout -- test001.txt (或还原全部 git checkout -- *)
将工作区修改的文件直接还原为最新版本
7.git reset HEAD
回退至当前版本(本地仓库,并移出暂存区)
8.git reset HEAD^
回退至上个版本(本地仓库,并移出暂存区)
9.git reset --hard HEAD^
回退至上一个版本(本地仓库,并移出暂存区,同时更新工作区的文件)
10.git reset --hard HEAD^^
回退至上上个版本(本地仓库,并移出暂存区,同时更新工作区的文件)
11.git reset –hard commitID
回退到某一次提交记录(不可逆,之前的提交记录会清除)
12.git revert commitID -m 1
撤销某一次的提交记录
三、还原至上一次的提交后(工作区修改了文件,未提交至暂存区)
1.举例说明,git仓库内修改文件test001.txt从 001 -> 001modify
此时界面查看文件包含感叹号.未入暂存区
echo -e 001modify > test001.txt
2.使用git checkout -- test001.txt 将工作区修改的文件直接还原.
此时查看:界面文件为绿色标记,命令行git status状态正常,无提交内容
git checkout -- test001.txt
四、还原至上一次的提交后(工作区修改了文件,并提交至暂存区,未提交到本地仓库)
1.举例说明,git仓库内修改文件test001.txt从 001 -> 001modify,并add加入暂存区:
echo -e 001modify > test001.txt
2.回退当前的版本:
界面文件为感叹号标记, 查看状态暂存区内容被移出,本地文件任为修改后.
git reset HEAD
五、还原至上一次的提交后(工作区修改了文件,并提交至暂存区,已提交到本地仓库,未推送远程仓库)
1.举例说明,git仓库内修改文件test001.txt从 001 -> 001modify,并add加入暂存区:
此时界面文件为感叹号标记
echo -e 001modify > test001.txt
六、还原至上一次的提交后(工作区修改了文件,并提交至暂存区,已提交到本地仓库,并已推送远程仓库)
1.本地文件修改,add加入暂存区,commit提交至本地仓库,push推送到远程仓库
此时文件内容被修改,windows文件为绿色标记,状态无提交内容.
2.使用git reset HEAD^直接回退至上个版本:
此时工作区文件仍为修改后,文件状态显示已移出暂存区
git reset HEAD^
3.使用git checkout -- test001.txt 将工作区修改的文件直接还原.
此时界面文件为绿色标记,查看状态无提交内容.
git checkout -- test001.txt
七、还原至上一次的提交后(当前版本已push,一步操作)
1.本地文件修改,add加入暂存区,commit提交至本地仓库,push推送到远程仓库
此时文件内容被修改,windows文件为绿色标记,状态无提交内容.
2.使用git reset --hard HEAD^还原至上一个版本
git reset --hard HEAD^
此时同时将文件从暂存区移除,并替换工作区为上个版本,界面标记为绿色
3.使用git push --force强制提交本地仓库至远程仓库
git push --force