版本控制
我们试着提交一个readme.txt文件,并用其感受版本控制功能。
原readme文件内容:
this is cp's channel. nice to meet u.
使用add,commit提交到仓库。
然后修改第二行的u->you保存。
this is cp's channel. nice to meet you.
这时我们可以通过命令:git status 查看库的当前状态。
$ 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: readme.txt no changes added to commit (use "git add" and/or "git commit -a")
会告诉我们readme已经被修改。
我们可以使用命令:git diff filename 查看具体的更改内容。
$ git diff readme.txt diff --git a/readme.txt b/readme.txt index 962cb11..fb5ee03 100644 --- a/readme.txt +++ b/readme.txt @@ -1,2 +1,2 @@ this is cp's channel. -nice to meet u. No newline at end of file +nice to meet you. No newline at end of file
然后我们再add、commit修改后的版本。
此时再查看status就显示
nothing to commit, working tree clean
没东西要commit,工作目录是干净的。
版本回退
此时我们已经提交了两次readme,怎么回退到上一个版本呢?
首先我们看看git log命令,可以查看所有的历史版本,也就是你每commit一次就会有一个新的版本。
git log命令会给出版本号、作者、提交时间和说明。
使用git reset命令可以进行回滚,命令格式:
$ git reset --hard HEAD^
HAED表示当前版本,HEAD^就是上一个版本,同理HEAD^^就是上上个版本,HEAD~n就是前n个版本。此处也可以用版本号来代替(不用写全,前几位就行,Git会自动匹配)。
查看文件果然被回滚了。
回到过去可以,但是想重返未来呢?只要找到版本号就可以去到任意地方,如果已经回退了,可以用git reflog查看命令历史,里边可以看到你对任何一个版本的操作,包括版本号。
Git里面怎么操作的?--工作区和暂存区
Git可以分为两个区域,工作区和暂存区。
工作区就是你仓库目录,不包括.git目录。
.git目录下就是版本库,版本库里有暂存区和分支(也就是你的仓库)。master分支是自动创建的。
暂存区一直保存上一次add的内容。
git add 实际上是将工作区文件添加到暂存区,
git commit 是将暂存区文件添加到分支,
git diff 是查看工作区和暂存区差别,
git diff --cached 是查看暂存区和分支区别,
git diff HEAD 是查看工作区和分支区别,
git checkout 是撤销工作区修改,把暂存区最新版本转到工作区,是add反向命令,
git reset HEAD 是把仓库最新版本转到暂存区。
Git管理的是修改不是文件
每次add就是将一次修改提交到暂存区。
这个需要使用时慢慢理解。
撤销修改
git checkout -- filename 命令,就是将暂存区最新版本转到工作区
git reset HEAD filename 是把仓库最新版本转到暂存区
如果修改了工作区文件,没有add,用checkout;
如果add了,用reset HEAD,此时暂存区回退,再用checkout,工作区回退;
如果你还脑子短路commit了,用reset -hard HEAD^,将暂存区、工作区都回滚到上一次提交,仅add没commit也可用此法。
删除文件
git rm filename,删除文件。并且git commit提交修改。
参考:廖雪峰的Git教程