Git入門——版本管理(2)
注:本文參考廖雪峯的個人網站
一、工作區和緩存區
工作區(Working Directory)在我電腦當中工作的文件夾
二、版本庫
工作區有一個隱藏的目錄,.git目錄,這個目錄就是版本庫,版本庫當中存放了很多東西,最重要的就是stage,叫做暫存區,還有Git爲我們創建的第一個分支master,還有上一篇講到的指向master的指針head。
Git提交文件流程:
git add
把文件添加到緩存區
git commit
提交文件到當前的分支(master),一次性提交所有的文件。
舉個小例子來解釋一下。
首先我修改我的my.txt,之後添加一個test.txt.
git 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: my.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
no changes added to commit (use "git add" and/or "git commit -a")
輸出的信息顯示:
1、修改了my.txt,但是並沒有提交
2、test.txt 從來都沒有提交過,所以他的狀態是untrack(無跡可尋)
那麼現在git add
一下看一看 what happend???
$ git add my.txt
$ git add test.txt
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: my.txt
new file: test.txt
現在都加到暫存區當中去了,git commit
提交一下就可以把從暫存區的信息推到版本庫當中去了。
$ git commit -m "two file commit"
[master 1f81097] two file commit
2 files changed, 3 insertions(+), 1 deletion(-)
create mode 100644 test.txt
現在暫存區是乾淨的, 所以再次git status
是什麼都咩有的
$ git status
On branch master
nothing to commit, working tree clean
二、關於修改
1、管理修改
我們現在想一個簡單的小過程,修改test.txt–git add
–再次修改–git commit
提交,想想就知道第二次修改沒交上去,但是爲什麼呢?
就像剛纔講的一樣, 文件都是提交到暫存區當中去,之後git commit
一下提交到版本庫當中去,剛纔的這套流程git add
之後是把第一次修改提交到暫存區當中,但是第二次修改沒有提交到暫存區當中去,所以git commit
提交的是暫存區當中的第一次修改內容。
2、撤銷修改
現在我的文件當中的內容(my.txt)是:i love company
但是假如說我現在修改成
i love company but i hate my boss
寫上了一些自己不能說出來的話,那麼如何修改回去呢??(除了打開文件重新寫之外)
情況一: 我還沒提交到暫存區
使用命令:git checkout -- filename
這條命令的還原情況之下還得分兩種情況:
(1)根本就沒提交到暫存區當中去,還原的時候就是直接回到沒修改的時候。
比如說現在我的文件內容是(還沒git add
)
i love company but i hate my boss
那麼checkout一下看看
他回來了, 變回了原來的內容。
(2)提交到暫存區當中了,但是之後又修改,進行還原的時候就會直接還原到提交到暫存區之後的那個文件的狀態
現在是:
之後我進行一次提交:
現在我再進行一次修改:
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20191226152414944.png
撤銷我的所有的修改:
現在的文件是什麼樣的呢??(很明顯,是提交到暫存區當中的那個)
情況二: git add
把已經修改的文件提交到暫存區當中,但是還沒git commit
操作方法:git reset head filename
重置頭指的文件,在這之後工作區會出現一個沒有提交的修改的文件,之後撤銷修改就行了。來看看詳細的操作步驟……
Git命令行操作:
1、git status
先看看當前狀態,有一個沒提交到版本庫當中的爲文件
2、git reset head my.txt
,再看看實現了什麼操作??
(很明顯,出現了一個還沒修改的文件,在工作區當中)
3、在工作區當中,那麼就好說了呀,直接git checkout
就行了,就變成了這個熊樣→
情況三:提交到了版本庫
那沒辦法了。上一篇文章當中提到的回退,直接回退到之前的版本,就撤銷了修改的操作。回憶一下:git reset --head 版本號
返回到某個版本。
撤銷修改總結
1、git add
之後的修改,還沒來得及git add
的修改,使用git checkout 文件名
進行撤回修改。
2、git add
到暫存區當中的文件, 使用git reset head 文件名
把文件改成還沒修改的狀態(在工作區當中的), 之後git checkout 文件名
撤銷修改
3、git commit
到版本庫當中的文件,那沒辦法了,只能回退到上一個版本當中了。git reset head 上一個版本號
進行撤銷修改。