Git入門——版本管理(2)

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 上一個版本號 進行撤銷修改。

上一篇:Git入門——版本管理(1)
下一篇:Git入門——遠程數據庫

發佈了58 篇原創文章 · 獲贊 15 · 訪問量 3079
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章