1. 程式人生 > >git 命令行(一)

git 命令行(一)

IT 暫存區 round 不同版本 版本控制 p s OS ref 修改

1. 版本回退

在實際工作中,我們腦子裏怎麽可能記得一個幾千行的文件每次都改了什麽內容,不然要版本控制系統幹什麽。版本控制系統肯定有某個命令可以告訴我們歷史記錄,在Git中,我們用 git log 命令查看:

技術分享圖片

退出git log命令行是: q

Git提供了一個命令 git reflog 用來記錄你的每一次命令:

技術分享圖片

如果我們要實現回退, Git必須知道當前版本是哪個版本,在Git中,用 HEAD 表示當前版本,也就是最新的提交009befc...711741(註意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^ ,上上一個版本就是 HEAD^^ ,當然往上100個版本寫100個^

比較容易數不過來,所以寫成HEAD~100

現在,我們要把當前版本回退到上一個版本,就可以使用 git reset 命令:

技術分享圖片

我們也可以是使用 commit_id 來在不同版本之間回退。

技術分享圖片

2. 版本庫(Repository)

工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。

Git的版本庫裏存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD

技術分享圖片

前面講了我們把文件往Git版本庫裏添加的時候,是分兩步執行的:

第一步是用 git add

把文件添加進去,實際上就是把文件修改添加到暫存區;

第二步是用 git commit 提交更改,實際上就是把暫存區的所有內容提交到當前分支。

2. 撤銷修改

1. 在Git中,git checkout -- file 可以丟棄工作區的修改:

技術分享圖片

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這裏有兩種情況:

一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。

總之,就是讓這個文件回到最近一次 git commit git add 時的狀態。

git checkout -- file 命令中的 -- 很重要,沒有 --,就變成了“切換到另一個分支”的命令,我們在後面的分支管理中會再次遇到git checkout命令。

2. 如果我們修改了文件git add 到暫存區了,慶幸的是,在commit之前,你發現了這個問題。用git status查看一下,修改只是添加到了暫存區,還沒有提交:Git同樣告訴我們,用命令 git reset HEAD file 可以把暫存區的修改撤銷掉(unstage),重新放回工作區:

git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。再用git status查看一下,現在暫存區是幹凈的,工作區有修改:然後按照第一步的方法回退。總結如下:

技術分享圖片

git 命令行(一)