使用命令行操作git add,commit等操作后发现有问题,需撤销…
git介绍
Git 本地数据管理,大概可以分为三个区,工作区,暂存区和版本库。
- 工作区(Working Directory)。是直接编辑的地方,肉眼可见,直接操作;
- 暂存区(Stage 或 Index)。数据暂时存放的区域;
- 版本库(commit History)。存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程git仓库了。
将修改添加到暂存区:
1 | git add |
将暂存区的内容提交到版本库中:
1 | git commit |
1 | git diff # 工作区 vs 暂存区 |
建立仓库
全局修改默认分支master到main
1 | git config --global init.defaultBranch main |
git提交前,现在git网页中新建仓库,获取链接。在本地做如下操作:
本地新建仓库
1 | 进入仓库文件夹 |
修改分支名
git init
生成的分支名为master,而github新建的默认分支名为main,在init之后修改分支名:
1 | git branch -m old_branch new_branch |
push本地已存在仓库
1 | git remote add origin git@github.com:***/forward.git |
git撤销操作
git撤销工作区的修改
git撤销工作区的修改,此时,没有使用git add .
。
- 撤销某个文件的修改
1
git checkout -- filename
- 撤销所有文件的修改
1
git checkout .
git撤销add
本地操作git add .
后发现操作食物或者有些文件不需要add,测试需要撤销该add动作:
撤销所有add
1
git reset HEAD
撤销a.cpp和b.cpp文件的add
1
git reset HEAD a.cpp b.cpp
再使用git status
查看状态,已撤销add操作。
git撤销本地commit
本地操作:
1 | git add . |
撤销操作:
- 用法一:git reset [-q] [
] [–] … - 用法二:git reset [–soft | –mixed | –hard | –merge | –keep ] [-q] [commit]
git reset命令一般会修改本地仓库:
- –mixed HEAD 修改暂存区里面的内容为当前快照里的内容,是git reset默认的参数,因此可缺省;
- –soft HEAD 本地仓库、暂存区、工作区都不改变。只撤销commit状态,不会删除修改的数据;
- –hard HEAD 修改暂存区、工作区里面的内容为当前快照里的内容。(这个很危险,曾经踩过坑,电脑的文件丢失了很多,也是导致我决心好好学一学git的原因,慎用)。会删除修改的数据。
实例:
撤销上一个commit,保留修改的数据:
1
2
3
4git reset
或 git reset --soft HEAD
或 git reset --soft HEAD~1
或 git reset [last_commit id]撤销前n个commit,保留修改的数据:
1
2git reset --soft HEAD~n
或 git reset [last good commit id]撤销上一个commit,不保留数据(慎重使用):
1
git reset --hard HEAD
git撤销push
本地操作:
1 | git add . |
现在本地执行撤销commit操作,回到需要保留的commit上,执行:
1 | git push origin branch-name --force |
可以看到本地该commit上的内容和远程的保持一致了。
gitignore
取消已经track的文件。
1 | git reset HEAD~1 |