Git的基本使用
git init
把当前目录变成Git可以管理的仓库:
$ git initInitialized empty Git repository in C:\Users\ydt\Desktop\练习\git-test\test
git status
可以查看当前状态
$ git statusOn branch masternothing to commit, working tree clean
当前工作区是干净的
假设在当前目录创建了新建文本文档.txt,git status查看状态
$ git statusOn branch masterUntracked files: (use "git add..." 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 新建文本文档.txtdiff --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添加指定名称的文件,<>内部写文件全称
$ git add 新建文本文档.txt
没有任何显示,说明添加成功
git status查看状态
$ git statusOn branch masterNo commits yetChanges to be committed: (use "git rm --cached..." 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 statusOn branch masternothing to commit, working tree clean
工作区是干净的
版本库&工作区&暂存区
暂存区:用git add把文件添加进去,还未进行commit的区域,就是暂存区;
版本库: 工作区有一个隐藏目录.git,就是Git的版本库。
git log
显示从最近到最远的提交日志
$ git logcommit 64fcede692e5db64cbee83d1965a2c15ddaa24e3 (HEAD -> master)Author: ydt <468602953@qq.com>Date: Fri Aug 17 14:24:30 2018 +0800 xxxcommit ad7f5fe1afbb208e8596b925c4a6198cbe72c5b0Author: ydt <468602953@qq.com>Date: Fri Aug 17 14:15:57 2018 +0800 第一次提交
可以加上--pretty-oneline,输出简略信息
$ git log --pretty=oneline64fcede692e5db64cbee83d1965a2c15ddaa24e3 (HEAD -> master) xxxad7f5fe1afbb208e8596b925c4a6198cbe72c5b0 第一次提交
上面的HEAD表示当前版本。那么HEAD^就是上一个版本,那么HEAD^^就是上上个版本,如果版本数较多,可以用HEAD~100,表示上100个版本。
git reset
回退到指定版本
$ git reset --hard HEAD^HEAD is now at ad7f5fe 第一次提交
查看提交记录
$ git logcommit ad7f5fe1afbb208e8596b925c4a6198cbe72c5b0 (HEAD -> master)Author: ydt <468602953@qq.com>Date: Fri Aug 17 14:15:57 2018 +0800 第一次提交
成功回退到上个版本
回退后可以发现,之前的版本已经不存在,如果窗口没有关闭,可以向上查找之前的log信息,找到之前版本的版本号(取前几位就行)
$ git reset --hard 64fcHEAD is now at 64fcede xxx
可以看到,成功回到最新的提交 xxx。
git reflog
用来记录你的每一次命令
假如窗口关闭,找不到新版本的commit id,就可以用git reflog来查找
$ git reflogad7f5fe (HEAD -> master) HEAD@{0}: reset: moving to HEAD^64fcede HEAD@{1}: reset: moving to 64fcad7f5fe (HEAD -> master) HEAD@{2}: reset: moving to HEAD^64fcede HEAD@{3}: commit: xxxad7f5fe (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 statusOn branch masterChanges to be committed: (use "git reset HEAD..." 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 新建文本文档.txtUnstaged changes after reset:M 新建文本文档.txt
查看状态:
$ git statusOn branch masterChanges not staged for commit: (use "git add..." to update what will be committed) (use "git checkout -- ..." 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了。