1.前言
在 git 中, 每一次提交(commit)的修改, 都會被單獨的保存起來. 也可以說 git 的中的所有文件都是一次次修改累積起來的. 文件好比樓房, 每個 commit 記錄 了蓋樓需添加或者拿走的材料. 整個施工過程也被記錄了下來.
2.修改記錄 log
之前我們以Mr Luoj 的名義對版本庫進行了一次修改, 添加了一個 1.py 的文件. 接下來我們就來查看版本庫的些施工的過程. 可以看到在 Author 那已經有我的名字和 email 信息了.
如果我們對1.py文件進行一次修改, 添加這行代碼:
a = 1
然後我們就能在 status 中看到修改還沒被提交的信息了.
$ 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: 1.py # 這裏顯示有一個修改還沒被提交
no changes added to commit (use "git add" and/or "git commit -a")
所以我們先把這次修改添加 (add) 到可被提交 (commit) 的狀態, 然後再提交 (commit) 這次的修改:
$ git add 1.py
$ git commit -m "change 1"
# 輸出
[master fb51216] change 1
1 file changed, 1 insertion(+) # 提示文件有一處添加
再次查看 log, 現在我們就能看到 create 1.py 和 change 1 這兩條修改信息了. 而且做出這兩條 commit 的 ID, 修改的 Author, 修改 Date 也被顯示在上面.
$ git log
# 輸出
commit fb51216b081e00db3996e14edf8ff080fab1980a
Author: Morvan Zhou <mz@email.com>
Date: Tue Nov 29 00:24:50 2016 +1100
change 1
commit 13be9a7bf70c040544c6242a494206f240aac03c
Author: Morvan Zhou <mz@email.com>
Date: Tue Nov 29 00:06:47 2016 +1100
create 1.py
如果刪除一部分代碼, 也會被記錄上, 比如把 a = 1 改成 a = 2, 再添加一個 b = 1.
a = 2
b = 1
3.查看 unstaged
如果想要查看這次還沒 add (unstaged) 的修改部分 和上個已經 commit 的文件有何不同, 我們將使用 $ git diff:
$ git diff #對比工作區(未 git add)和暫存區(git add 之後)
4.查看 staged (–cached)
如果你已經 add 了這次修改, 文件變成了 “可提交狀態” (staged), 我們可以在 diff 中添加參數 --cached 來查看修改:
$ git add . # add 全部修改文件
$ git diff --cached #對比暫存區(git add 之後)和版本庫(git commit 之後)
5.查看 staged & unstaged (HEAD)
a = 2
b = 1
c = b
目前 a = 2 和 b = 1 已被 add, c = b 是新的修改, 還沒被 add.
$ git diff HEAD # 對比工作區(未 git add)和版本庫(git commit 之後)