Git学习笔记(一)

安装

Debain系统使用sudo apt install git命令安装

安装完成后使用下列命令设置用户名及邮箱:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

创建版本库

建立新目录:

$ mkdir learngit
$ cd learngit
$ pwd
/Users/XXX/learngit

设置当前目录为仓库:

$ git init
Initialized empty Git repository in /Users/XXX/learngit/.git/

添加文件到版本库

新建一个readme.txt文件,内容如下:

Git is a version control system.
Git is free software.

把一个文件放到GIt仓库共两步。
第一步,添加文件:

$ git add readme.txt

第二步,递交文件及说明:

$ git commit -m "wrote a readme file"

版本控制

修改readme.txt文件并提交:

Git is a distributed version control system.
Git is free software.

使用git status命令查看仓库状态
使用git diff比较各版本差异

版本回退

再次修改readme.txt并提交:

Git is a distributed version control system.
Git is free software distributed under the GPL.

使用git log查看提交日志
使用git reset回退版本(HEAD表示当前版本,HEAD^表示上一版本,以此类推)

$ git reset --hard HEAD^
Git学习笔记(一)_第1张图片
原版本

Git学习笔记(一)_第2张图片
回退后

要回到append GPL这一版本,可以通过git reflog查找commit id,并通过git reset命令回退,如:

$ git reflog
ac816fd HEAD@{2}: reset: moving to HEAD^
6440cfb HEAD@{3}: commit: append GPL
ac816fd HEAD@{4}: commit: add distributed
7e84cca HEAD@{5}: commit (initial): wrote a readme file

此处得到commit id: 6440cfb

$ git reset --hard 6440cfb 
HEAD 现在位于 6440cfb append GPL

完成回退

工作区与暂存区

再次修改readme.txt

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.

并在工作区新建LINCESE文件。
使用两次git add命令将readme.txtLINCESE都添加后,暂存区就会变成以下状态:

Git学习笔记(一)_第3张图片
添加到暂存区

git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。一旦提交后,如果又没有对工作区做任何修改,那么工作区就是“干净”的。现在版本库变成了这样,暂存区就没有任何内容了:

Git学习笔记(一)_第4张图片
提交到分支

管理修改

与其他版本控制系统不同,Git跟踪并管理的是修改,而非文件。

第一步,对readme.txt做一个修改,比如加一行内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes.

然后,添加到暂存区。

$ git add readme.txt
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       modified:   readme.txt
#

然后,再修改readme.txt:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

提交:

$ git commit -m "git tracks changes"
[master bbbc32b] git tracks changes
 1 file changed, 1 insertion(+)

提交后,再看看状态:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

发现第二次的修改未被提交。理由如下:

第一次修改 -> git add -> 第二次修改 -> git commit

Git管理的是修改,当使用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:

$ git diff HEAD -- readme.txt 
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.

可见,第二次修改确实没有被提交。
如要提交则应该先添加到暂存区,再提交。

撤销修改

如果需要修改的内容还未被添加到暂存区,git checkout -- file可以丢弃工作区的修改。命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

如果需要修改的内容已经被添加到暂存区,但是还未被提交,可以用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区。

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

如果要修改的内容已被提交,则参考版本回退章节内容。

删除文件

在Git中,删除也是一个修改操作。
如果要删除版本库中文件的,使用git rmgit commit
如果要恢复本地误删文件的,则使用git checkout -- 来恢复到上次提交的状态。

你可能感兴趣的:(Git学习笔记(一))