位置:首頁 > 其他技術 > Git教學 > Git 修正錯誤

Git 修正錯誤

大部分的人都會犯錯。所以每VCS提供了一個功能,修正錯誤,直到特定的點。 Git提供功能使用,我們可以撤銷已作出的修改到本地資源庫。

假設用戶不小心做了一些更改,以他的本地的倉庫,現在他要扔掉這些變化。在這種情況下,恢複操作中起著重要的作用。

恢複未提交的更改

讓我們假設Jerry 不小心修改文件從自己的本地倉庫。但他想扔掉他的修改。要處理這種情況,我們可以使用git checkout命令。我們可以使用這個命令來恢複文件的內容。

[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src

[jerry@CentOS src]$ git status -s
M string_operations.c

[jerry@CentOS src]$ git checkout string_operations.c

[jerry@CentOS src]$ git status –s

甚至我們可以使用git checkout命令刪除的文件從本地庫。讓我們假設Tom 刪除文件從本地存儲庫,我們希望這個文件。我們可以做到這一點,使用相同的命令。

[tom@CentOS src]$ pwd
/home/tom/top_repo/project/src

[tom@CentOS src]$ ls -1
Makefile
string_operations.c

[tom@CentOS src]$ rm string_operations.c

[tom@CentOS src]$ ls -1
Makefile

[tom@CentOS src]$ git status -s
D string_operations.c

Git是顯示文件名前的字母D。這標誌著該文件已被刪除,從本地資源庫。

[tom@CentOS src]$ git checkout string_operations.c

[tom@CentOS src]$ ls -1
Makefile
string_operations.c

[tom@CentOS src]$ git status -s
注意:我們可以執行所有這些操作之前提交操作。

刪除臨時區域變化

我們已經看到,當我們執行加法運算;文件移動從本地存儲庫,參數區域。如果用戶不小心修改一個文件,並把它添加到臨時區域,但他馬上意識到犯了錯誤。他希望恢複他的改變。我們可以處理這種情況下,通過使用git checkout命令。

在Git是一個HEAD指針始終指向最新提交。如果想撤銷變更分階段區域,那麼可以使用git checkout命令,但checkout命令,必須提供額外的參數HEAD指針。額外提交指針參數指示的git checkout命令,重置工作樹,還能夠去除分階段。

讓我們假設Tom 從自己的本地倉庫修改一個文件。如果我們查看這個文件的​​狀態,它會顯示文件被修改,但不加入臨時區域。

tom@CentOS src]$ pwd
/home/tom/top_repo/project/src
# Unmodified file

[tom@CentOS src]$ git status -s

# Modify file and view it’s status.
[tom@CentOS src]$ git status -s
M string_operations.c

[tom@CentOS src]$ git add string_operations.c

Git 的狀態顯示該文件是在分期區域,現在它恢複使用git checkout命令和視圖狀態恢複的文件。

[tom@CentOS src]$ git checkout HEAD -- string_operations.c

[tom@CentOS src]$ git status -s

將HEAD指針與GIT複位

做一些改變後,可能會決定刪除這些更改。 Git 複位命令是用來重置或恢複一些變化。我們可以執行三種不同類型的複位操作。

下圖顯示圖形表示 Git複位命令。

git Tutorial
git Tutorial

SOFT

每個分支都有HEAD 指針指向最新提交。如果我們使用git  --soft複位命令選項,隨後提交ID,然後將隻有頭指針複位,不破壞任何東西。

.git/refs/heads/master 文件存儲的提交ID 的HEAD 指針。我們可以驗證它通過使用git log -1 命令。

[jerry@CentOS project]$ cat .git/refs/heads/master
577647211ed44fe2ae479427a0668a4f12ed71a1

現在查看最新提交的ID,這將配合上述提交ID。

[jerry@CentOS project]$ git log -2

上麵的命令會產生以下結果。

commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <tom@gitbook.net>
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary


commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <jerry@gitbook.net>
Date: Wed Sep 11 10:16:25 2013 +0530

Added compiled binary

讓我們重設HEAD 指針。

[jerry@CentOS project]$ git reset --soft HEAD~

現在我們隻重設HEAD 指針回到一個位置。讓我們檢查內容.git/refs/heads/master 文件.

[jerry@CentOS project]$ cat .git/refs/heads/master
29af9d45947dc044e33d69b9141d8d2dad37cc62

從文件提交ID改變,現在驗證通過查看提交的信息。

jerry@CentOS project]$ git log -2

上麵的命令會產生以下結果。

commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <jerry@gitbook.net>
Date: Wed Sep 11 10:16:25 2013 +0530

Added compiled binary


commit 94f7b26005f856f1a1b733ad438e97a0cd509c1a
Author: Jerry Mouse <jerry@gitbook.net>
Date: Wed Sep 11 10:08:01 2013 +0530

Added Makefile and renamed strings.c to string_operations.c

混合

Git的複位 -- mixed選項從分段區域尚未提交還原更改。它僅恢複變化形成暫存區。實際所做的更改到工作副本的文件不受影響。默認的Git的複位相當於git的複位 -- mixed。

有關更多詳細信息,請參閱部分刪除同一章臨時區域變化。

HARD

如果使用 - hard選項用 Git複位命令,它會清除暫存區域,它會重設HEAD 指針,以最後一次提交的具體提交ID,也刪除本地文件的變化。

讓我們檢查提交的ID

[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src

[jerry@CentOS src]$ git log -1

上麵的命令會產生以下結果。

commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <tom@gitbook.net>
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary

Jerry 修改過的文件,在文件的開始,加入單行注釋。

[jerry@CentOS src]$ head -2 string_operations.c
/* This line be removed by git reset operation */
#include <stdio.h>

他使用git status命令驗證。

[jerry@CentOS src]$ git status -s
M string_operations.c

Jerry 修改後的文件添加到分期區域,並驗證它與git的狀態運行。

[jerry@CentOS src]$ git add string_operations.c
[jerry@CentOS src]$ git status

上麵的命令會產生以下結果。

# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#
modified: string_operations.c
#

Git的狀態,顯示該文件是在臨時區域。現在重置HEAD  用 --hard選項。

[jerry@CentOS src]$ git reset --hard 577647211ed44fe2ae479427a0668a4f12ed71a1

HEAD is now at 5776472 Removed executable binary

Git 複位命令成功,這將恢複從分段區的文件,以及刪除本地對文件所做的更改。

[jerry@CentOS src]$ git status -s

Git 狀態顯示,文件恢複從分段區。

[jerry@CentOS src]$ head -2 string_operations.c
#include <stdio.h>

Head 命令還顯示,複位操作刪除局部變化。