git的使用方法记录。

安装(Linux)

1
$ sudo pacman -S git

安装完之后设置用户和邮箱

1
2
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

以上的 --global指定了, 本系统所有的仓库都会使用这个配置。

新建一个版本库

1
2
3
$ mkdir mygit
$ cd mygit
$ git init

添加文件

假如你在本目录下添加了一个叫readme.txt的文件

1
2
$ git add readme.txt
$ git commit -m "add readme.txt"

commit -m后面的参数为此次修改的提交说明.

提交修改后的文件

查看状态

如果你修改了redme.txt运行git status

1
2
3
4
5
6
7
8
9
$ 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: readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

它告诉你, redme.txt已经被修改过了, 但是还没有准备提交的修改.

比较修改前和修改后的不同

如果你已经忘记了你修改的内容, 运行git diff比较不同.

1
2
3
4
5
6
7
8
9
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index c4990a0..4cd0f41 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
Git is a distributed version control system.
-Git is free software distributed ubder the GPL.
+Git is free software distributed ubder the f.

可以看到, 我把Git is free software distributed ubder the GPL.换成了Git is free software distributed ubder the f..

提交修改

$ git add reame.txt
$ git commit -m "change GPL to f"

版本退回

查询修改记录

通过git log

$ git log
commit eea876296f438267c5a2983b2f31792067558b40 (HEAD -> master)
Author: ffshine <ffshine9@gmail.com>
Date:   Wed Jan 31 20:17:13 2018 +0800

    change GPL to f

commit 4c7884d8021d9b333651c11eb9746d2ada23cf4a
Author: ffshine <ffshine9@gmail.com>
Date:   Wed Jan 31 19:29:55 2018 +0800

    add GPL

commit d79a6a5e90fa4ef7d2a1fb2c788b98307f411311
Author: ffshine <ffshine9@gmail.com>
Date:   Wed Jan 31 19:28:25 2018 +0800

    add distributed

commit 340d6f6d36da7f551db7ca6e78e529088732f21d
Author: ffshine <ffshine9@gmail.com>
Date:   Wed Jan 31 19:25:17 2018 +0800

    wrote a readme file

如果记录过多不好查阅的话, 添加--pretty=oneline参数, 所有的log都会在一行显示出来.

回滚

在git中,有个HEAD指针, 它指向当前的记录,HEAD^指向前一个记录,HEAD^^再往前一个, 以此类推. 当然,前一百个不会让你写一百个^,你可以这样写HEAD~100.

$ git raset --hard HEAD^

后悔了

回滚了后悔了怎么办, git每条修改记录创建时, 都会有一个对应的ID. 比如说, 上一条我运行git commit -m "change GPL to f"后, 返回的是:

[master eea8762] change GPL to f

如果要回到这一条记录, 只需要运行:

$ git reset --hard eea8762

但是,如果回滚之后, 关闭了窗口, 找不到这条记录了怎么办. 没关系, git已经悄悄记录了你执行的每一条命令,只需要通过git reflog就能查询出来.

$ git reflog
    eea8762 (HEAD -> master) HEAD@{0}: commit: change GPL to f
    4c7884d HEAD@{1}: reset: moving to 4c7884d
    d79a6a5 HEAD@{2}: reset: moving to HEAD^
    4c7884d HEAD@{3}: commit: add GPL
    d79a6a5 HEAD@{4}: commit: add distributed
    340d6f6 HEAD@{5}: commit (initial): wrote a readme file
------ end ------