• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Git教程
    Git標簽管理
    Git分支
    Git操作
    Git應用
    GitHub應用
    IDEA對于Git&GitHub的支持
    Git與GitHub使用注意事項

    Git修正錯誤

     

     

    人非圣賢孰能。所以每個VCS都提供一個功能來修復錯誤,直到Git控制的某一點上。 Git提供了一個功能,可用于撤消對本地存儲庫所做的修改。

     

    假設用戶意外地對本地存儲庫進行了一些更改,然后想要撤消這些更改。 在這種情況下,恢復操作起著重要的作用。

     

     

    恢復未提交的更改

     

    假設我們不小心修改了本地存儲庫中的一個文件,此時想撤銷這些修改。為了處理這種情況,我們可以使用git checkout命令。可以使用此命令來還原文件的內容。

     

    為了更好的演示,我們首先在 sample/src 目錄下創建一個文件:string.py ,其代碼如下所示:

     

    #!/usr/bin/python3
    
    var1 = 'Hello World!'
    var2 = "Python Programming"
    
    print ("var1[0]: ", var1[0])
    print ("var2[1:5]: ", var2[1:5]) # 切片加索引
    

     

    并使用以下命令將此文件推送到遠程存儲庫:

     

    $ pwd
    /D/worksp/sample
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git add src/
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    Changes to be committed:
      (use "git reset HEAD ..." to unstage)
    
            new file:   src/string.py
    
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git add src/string.py
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git commit -m "add new file string.py"
    [master 44ea8e4] add new file string.py
     1 file changed, 7 insertions(+)
     create mode 100644 src/string.py
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git push origin master
    Username for 'http://git.oschina.net': 769728683@qq.com
    Password for 'http://769728683@qq.com@git.oschina.net':
    Counting objects: 5, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (4/4), 443 bytes | 0 bytes/s, done.
    Total 4 (delta 0), reused 0 (delta 0)
    
    

     

    現在,已經將string.py添加到遠程存儲庫中了。

     

    假設我們不小心/或者有心修改了本地存儲庫中的一個文件。但現在不想要這些修改的內容了,也就是說想要撤銷修改。要處理這種情況,那么可以使用git checkout命令。可以使用此命令來還原文件的內容。

     

    $ pwd
    /D/worksp/sample
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    Changes not staged for commit:
      (use "git add ..." to update what will be committed)
      (use "git checkout -- ..." to discard changes in working directory)
    
            modified:   src/string.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git checkout src/string.py
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    nothing to commit, working directory clean
    
    Administrator@MY-PC /D/worksp/sample (master)
    $
    
    

     

    此外,還可以使用git checkout命令從本地存儲庫獲取已刪除的文件。假設我們從本地存儲庫中刪除一個文件,我們想要恢復這個文件。那么可以通過使用git checkout命令來實現這一點。

     

    $ ls -l
    total 1
    -rw-r--r--    1 Administ Administ       57 Jul  7 05:37 README.md
    drwxr-xr-x    1 Administ Administ        0 Jul 10 21:16 src
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ cd src/
    
    Administrator@MY-PC /D/worksp/sample/src (master)
    $ ls -l
    total 1
    -rwxr-xr-x    1 Administ Administ      156 Jul 10 21:16 string.py
    
    Administrator@MY-PC /D/worksp/sample/src (master)
    $ rm string.py
    
    Administrator@MY-PC /D/worksp/sample/src (master)
    $ ls -l
    total 0
    
    Administrator@MY-PC /D/worksp/sample/src (master)
    $ git status -s
     D string.py
    

     

    Git在文件名前顯示字母D, 這表示該文件已從本地存儲庫中刪除。

     

    $ git checkout string.py
    
    Administrator@MY-PC /D/worksp/sample/src (master)
    $ ls -l
    total 1
    -rwxr-xr-x    1 Administ Administ      156 Jul 10 21:24 string.py
    
    Administrator@MY-PC /D/worksp/sample/src (master)
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    nothing to commit, working directory clean
    
    

     

    注意:可以在提交操作之前執行這些操作。

     

     

    刪除分段區域的更改

     

    我們已經看到,當執行添加操作時,文件將從本地存儲庫移動到暫存區域。 如果用戶意外修改文件并將其添加到暫存區域,則可以使用git checkout命令恢復其更改。

     

    在Git中,有一個HEAD指針總是指向最新的提交。 如果要從分段區域撤消更改,則可以使用git checkout命令,但是使用checkout命令,必須提供一個附加參數,即HEAD指針。 附加的提交指針參數指示git checkout命令重置工作樹,并刪除分段更改。

     

    讓我們假設從本地存儲庫修改一個文件。 如果查看此文件的狀態,它將顯示該文件已修改但未添加到暫存區域。

     

    $ pwd
    /D/worksp/sample/src
    
    Administrator@MY-PC /D/worksp/sample/src (master)
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    Changes not staged for commit:
      (use "git add ..." to update what will be committed)
      (use "git checkout -- ..." to discard changes in working directory)
    
            modified:   string.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    Administrator@MY-PC /D/worksp/sample/src (master)
    $ git add string.py

     

    Git狀態顯示該文件存在于暫存區域,現在使用git checkout命令恢復該文件,并查看還原文件的狀態。

     

    $ git checkout head -- string.py
    
    Administrator@MY-PC /D/worksp/sample/src (master)
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    nothing to commit, working directory clean
    
    

     

     

    用Git復位移動頭指針

     

    經過少量更改后,可以決定刪除這些更改。 git reset命令用于復位或恢復更改。 我們可以執行三種不同類型的復位操作。

     

    下圖顯示了git reset命令的圖示。

     

    git reset命令之前

     

     

    git reset命令之后:

     

     

     

    ⒈ —soft選項

     

    每個分支都有一個HEAD指針,它指向最新的提交。 如果用--soft選項后跟提交ID的Git reset命令,那么它將僅重置HEAD指針而不會破壞任何東西。

     

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

     

    $ pwd
    /D/worksp/sample
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ cat .git/refs/heads/master
    44ea8e47307b47c9a80b44360e09f973e79312b0
    
    

     

    現在,查看最新前兩個的提交ID,最近一次ID將與上述提交ID一致。

     

    $ git log -2
    commit 44ea8e47307b47c9a80b44360e09f973e79312b0
    Author: maxsu 
    Date:   Mon Jul 10 21:09:35 2017 +0800
    
        add new file string.py
    
    commit 7d8162db36723b8523c56ad658a07808ae7fb64c
    Author: minsu 
    Date:   Mon Jul 10 17:51:11 2017 -0700
    
        remove/delete module.py
    
    Administrator@MY-PC /D/worksp/sample (master)
    $
    
    

     

    下面我們重置HEAD指針。

     

    現在,只需將HEAD指針重新設置一個位置。現在查看.git/refs/heads/master文件的內容。

     

    Administrator@MY-PC /D/worksp/sample (master)
    $ cat .git/refs/heads/master
    7d8162db36723b8523c56ad658a07808ae7fb64c

     

    來自文件的提交ID已更改,現在通過查看提交消息進行驗證。

     

    $ git log -2
    commit 7d8162db36723b8523c56ad658a07808ae7fb64c
    Author: minsu 
    Date:   Mon Jul 10 17:51:11 2017 -0700
    
        remove/delete module.py
    
    commit 6bdbf8219c60d8da9ad352c23628600faaefbe13
    Author: maxsu 
    Date:   Mon Jul 10 20:34:28 2017 +0800
    
        renamed main.py to module.py
    

     

    ⒉ mixed選項

     

    使用--mixed選項的Git重置將從尚未提交的暫存區域還原這些更改。它僅從暫存區域恢復更改。對文件的工作副本進行的實際更改不受影響。 默認Git復位等效于執行git reset - mixed。

     

    ⒊ hard選項

     

    如果使用--hard選項與Git重置命令,它將清除分段區域; 它會將HEAD指針重置為特定提交ID的最新提交,并刪除本地文件更改。

     

    讓我們查看提交ID。

     

    Administrator@MY-PC /D/worksp/sample (master)
    $ pwd
    /D/worksp/sample
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git log -1
    commit 7d8162db36723b8523c56ad658a07808ae7fb64c
    Author: minsu 
    Date:   Mon Jul 10 17:51:11 2017 -0700
    
        remove/delete module.py
    

     

    通過在文件開頭添加單行注釋來修改文件或者往文件里添加其它代碼。

     

    $ head -2 src/string.py
    #!/usr/bin/python3
    
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git status -s
     M src/string.py
    

     

    將修改的文件添加到暫存區域,并使用git status命令進行驗證。

     

    $ git add src/string.py
    
    Administrator@MY-PC /D/worksp/sample (master)
    $ git status
    On branch master
    Your branch and 'origin/master' have diverged,
    and have 1 and 1 different commit each, respectively.
      (use "git pull" to merge the remote branch into yours)
    
    Changes to be committed:
      (use "git reset HEAD ..." to unstage)
    
            modified:   src/string.py
    
    

     

    Git狀態顯示該文件存在于暫存區域中。 現在,重置HEAD與--hard選項。

     

    $ git reset --hard 7d8162db36723b8523c56ad658a07808ae7fb64c
    HEAD is now at 7d8162d remove/delete module.py
    
    Administrator@MY-PC /D/worksp/sample (master)
    
    

     

    git reset命令成功,這將從分段區域還原文件,并刪除對文件所做的任何本地更改。

     

    Administrator@MY-PC /D/worksp/sample (master)
    $ git status -s

     

    Git狀態顯示該文件已從暫存區域還原,當前恢復到了刪除 moudle.py 時的版本了。

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏