Git学习笔记--版本控制

版本控制

我们试着提交一个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教程

原文地址:https://www.cnblogs.com/cpcpp/p/12952570.html