Git的基本使用
Git的基本使用
git init
把当前目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in C:\Users\ydt\Desktop\练习\git-test\test
git status
可以查看当前状态
$ git status
On branch master
nothing to commit, working tree clean
当前工作区是干净的
假设在当前目录创建了新建文本文档.txt,git status查看状态
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
"\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243 (2).txt"
nothing added to commit but untracked files present (use "git add" to track)
新增了文件,并且未add和commit(修改监控包括了文件内的修改,当前目录的文件增删、重命名等)
git diff
git status可以告诉我们什么文件被修改过,而如果想知道具体的修改,可以用git diff
$ git diff 新建文本文档.txt
diff --git "a/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt" "b/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
index d800886..31ed750 100644
--- "a/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
+++ "b/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
@@ -1 +1 @@
-123
\ No newline at end of file
+1231231
\ No newline at end of file
git add
将文件添加进仓库暂存区
$ git add . 添加所有的文件、文件夹
$ git add <file> 添加指定名称的文件,<>内部写文件全称
$ git add 新建文本文档.txt
没有任何显示,说明添加成功
git status查看状态
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: "\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
新建文本文档.txt已经在暂存区。
git commit
将暂存区的修改全部提交到分支,-m为提交的说明信息
$ git commit -m"第一次提交"
[master (root-commit) ad7f5fe] 第一次提交
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 "\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
提交成功
git status再次查看状态
$ git status
On branch master
nothing to commit, working tree clean
工作区是干净的
版本库&工作区&暂存区
工作区:就是在电脑里能看到的目录
暂存区:用git add把文件添加进去,还未进行commit的区域,就是暂存区;
版本库: 工作区有一个隐藏目录.git,就是Git的版本库。
git log
显示从最近到最远的提交日志
$ git log
commit 64fcede692e5db64cbee83d1965a2c15ddaa24e3 (HEAD -> master)
Author: ydt <468602953@qq.com>
Date: Fri Aug 17 14:24:30 2018 +0800
xxx
commit ad7f5fe1afbb208e8596b925c4a6198cbe72c5b0
Author: ydt <468602953@qq.com>
Date: Fri Aug 17 14:15:57 2018 +0800
第一次提交
可以加上--pretty-oneline,输出简略信息
$ git log --pretty=oneline
64fcede692e5db64cbee83d1965a2c15ddaa24e3 (HEAD -> master) xxx
ad7f5fe1afbb208e8596b925c4a6198cbe72c5b0 第一次提交
上面的HEAD表示当前版本。那么HEAD^就是上一个版本,那么HEAD^^就是上上个版本,如果版本数较多,可以用HEAD~100,表示上100个版本。
git reset
回退到指定版本
$ git reset --hard HEAD^
HEAD is now at ad7f5fe 第一次提交
查看提交记录
$ git log
commit ad7f5fe1afbb208e8596b925c4a6198cbe72c5b0 (HEAD -> master)
Author: ydt <468602953@qq.com>
Date: Fri Aug 17 14:15:57 2018 +0800
第一次提交
成功回退到上个版本
回退后可以发现,之前的版本已经不存在,如果窗口没有关闭,可以向上查找之前的log信息,找到之前版本的版本号(取前几位就行)
$ git reset --hard 64fc
HEAD is now at 64fcede xxx
可以看到,成功回到最新的提交 xxx。
git reflog
用来记录你的每一次命令
假如窗口关闭,找不到新版本的commit id,就可以用git reflog来查找
$ git reflog
ad7f5fe (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
64fcede HEAD@{1}: reset: moving to 64fc
ad7f5fe (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
64fcede HEAD@{3}: commit: xxx
ad7f5fe (HEAD -> master) HEAD@{4}: commit (initial): 第一次提交
同样,顺利的找到了最新版本 xxx
git checkout -- file
丢弃工作区的修改
这里有两种情况
-
一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
-
一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
git reset HEAD
可以把暂存区的修改撤销掉,重新放回工作区。
这里我们将txt随便做点修改,然后add进暂存区,查看状态:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: "\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
接下来执行撤销:
$ git reset HEAD 新建文本文档.txt
Unstaged changes after reset:
M 新建文本文档.txt
查看状态:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: "\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
no changes added to commit (use "git add" and/or "git commit -a")
可以看到,现在暂存区是干净的,工作区有修改
根据需要,还可以进一步删除工作区的修改:
$ git checkout -- 新建文本文档.txt
至于撤销commit,就该用到版本回退 git reset --hard了。