Git
回退版本
- # 回退至上一次提交的版本
- # 中间的六个长度的字符串对应的是日志信息的提交 id 的前六位
- # 网上回退 100 个版本 $ Git reset --hard HEAD~100
- $ Git reset --hard HEAD^
HEAD is now at c338f61 第三次提交
- ?
- # 回退至指定版本
- $ Git reset --hard cac83a
HEAD is now at cac83a7 第二次提交
- ?
- # 查看使用过的指令
- $ Git reflog
- cac83a7 (HEAD -> master) [email protected]{
- 0
- }: reset: moving to cac83a
- c338f61 [email protected]{
- 1
- }: reset: moving to HEAD^
99d4ce1 [email protected]{2}: commit: 第四次提交
c338f61 [email protected]{3}: commit: 第三次提交
cac83a7 (HEAD -> master) [email protected]{4}: commit: 第二次提交
77c2b2c [email protected]{5}: commit (initial): 第一次提交
Git 提交过程
我们首先要理解 Git 的提交过程第一步是用 Git add 把文件添加进去, 实际上就是把文件修改添加到缓存区; 第二步是用 Git commit 提交更改, 实际上就是把暂存区的所有内容提交到本地仓库.
创建 Git 版本库时, Git 自动创建一个 master 分支, 所以, 现在, Git commit 就是往 master 分支上提交更改.
?
管理修改
- ?
- # 查看 a 文件
- $ cat a.txt
- aaaaaaaaaaa
- # 修改文件后查看
- $ cat a.txt
- aaaaaaaaaaa
- bbbbb
- #add 到缓存区
- $ Git add a.txt
- # 再修改文件
- $ cat a.txt
- aaaaaaaaaaa
- bbbbb
- cc
- # 直接 commit 到本地仓库
- $ Git commit -m "第三次提交"
[master a4c3eaf] 第三次提交
- 1 file changed, 1 insertion(+)
- # 此时查看 a.txt 的状态还是修改未添加提交, 这是因为, commit 只把 add 到缓存区的文件 commit 到本地仓库, 因此只要修改文件, 都要先 add 再 commit, 这同时也是 Git 的一种安全机制
- ?
- #Git diff 对比修改你修改过的文件会清楚的标识出来
- $ Git diff
- diff --Git a/learn2/a.txt b/learn2/a.txt
- index 776474b..a8ff3e8 100644
- --- a/learn2/a.txt
- +++ b/learn2/a.txt
- @@ -4,3 +4,4 @@ ccccccc
- ddddddddd
- eeeee
- fffff
- +gggg
- ?
撤销修改
?
你写代码, 写完提交了, 突然发现自己写错了, 这时候就需要回退一下
- # 先修改一次提交
- $ cat a.txt
- aaaaaaaaaaa
- bbbbbbbb
- ccccccc
- ?
- $ Git commit -m "第三次提交"
[master a4c3eaf] 第三次提交
- 1 file changed, 1 insertion(+)
- ?
再修改 a 文件
- $ cat a.txt
- aaaaaaaaaaa
- bbbbbbbb
- ccccccc
- ddddd
添加到缓存区
$ Git add a.txt
回退版本
$ Git checkout -- a.txt
此时再查看 a 文件
- $ cat a.txt
- aaaaaaaaaaa
- bbbbbbbb
- ccccccc
发现回退到修改前的版本
?
再修改 a 文件
- $ cat a.txt
- aaaaaaaaaaa
- bbbbbbbb
- ccccccc
- ddddd
添加到缓存区
$ Git add a.txt
查看 a 文件的状态 发现已经添加到缓存区 可以提交的状态
- $ Git status
- On branch master
- Changes to be committed:
- (use "git restore --staged <file>..." to unstage)
- modified: a.txt
用命令 Git reset HEAD <file > 可以把暂存区的修改撤销掉 (unstage), 重新放回工作区:
- $ Git reset HEAD a.txt
- Unstaged changes after reset:
- M learn2/a.txt
查看 a 文件的状态 发现未添加到缓存区 可以添加的状态
- $ Git status
- On branch master
- Changes not staged for commit:
- (use "git add <file>..." to update what will be committed)
- (use "git restore <file>..." to discard changes in working directory)
- modified: a.txt
- ?
- no changes added to commit (use "git add" and/or "git commit -a")
- ?
来源: http://www.bubuko.com/infodetail-3209613.html