【Git】git撤銷與回滾


 git的撤銷與回滾在平時使用中還是比較多的,比如說我們想將某個修改后的文件撤銷到上一個版本,或者是想撤銷某次多余的提交,都要用到git的撤銷和回滾操作。撤銷分兩種情況,一個是commit之前,一個是commit之后,下面具體看下這兩種情況。

  一.git commit之前

        未添加到暫存區的撤銷(沒有git add)

        添加進暫存區的撤銷(git add后)

$ git status
On branch test_git
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: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeUnitTrait.php
    modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeWordFilterTrait.php

 
        

可以通過

 git checkout -- filename來撤銷修改
git checkout -- new_src/app/Http/Controllers/Frontend/KyHome/KyHomeWordFilterTrait.php

再次查看文件狀態發現選擇的文件已經成功被撤銷了。

$ git status
On branch test_git
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: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeUnitTrait.php
    

如果想將多個文件一次性撤銷可以用

 git checkout -- .

上面是 未添加到暫存區的撤銷

下面是添加到暫存區的

$ git status
On branch test_git
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:   new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
        modified:   new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php
$ git add -A
$ git status
On branch test_git
Changes to be committed:    已經添加暫存區了
  (use "git reset HEAD <file>..." to unstage)

        modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
        modified:   new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php

從暫存區撤銷

$ git reset HEAD new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
Unstaged changes after reset:
M       new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php

如果想一次性將所有暫存區文件撤銷回來,還是上面的命令,不過不用加文件路徑。

$ git reset HEAD
Unstaged changes after reset:

M       new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
M       new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php

 

二.git commit之后

如果當commit提交后想撤銷的話,這就需要revert命令。git revert 命令是撤銷某次操作,而在此次操作之前和之后的提交記錄都會保留。

先修改了幾個文件然后commit 再用git log查看提交記錄。

commit 2842c8065322085c31fb7b8207b6296047c4ea3
Author: songguojun <songgj@kingnet.sh>
Date:   Sat Apr 28 11:21:30 2018 +0800

    add content

然后使用revert  后面跟上git提交的commitid

git  revert 2842c8065322085c31fb7b8207b6296047c4ea3
Revert "add content"

This reverts commit 2842c8065ffe2085c31fb7b8207b6296047c4ea3.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch test_git
# Changes to be committed:
#       modified:   new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
#       modified:   new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php

然后在推送到遠端更新遠程倉庫代碼,修改的文件就撤銷回來了。注意的是revert奇數次生效,偶數次又回到之前的修改狀態。比如一個文件內容是a,那么修改為ab,revert后文件變成了a,如果在revert后文件又還原成ab了。

 

還有就是如果想回到之前某個版本,可以用reset命令,可以回退到某次提交,那該提交之后的提交都會回滾,不過這種覆蓋是不可逆的,之前的提交記錄都沒有了。所以平時開發中盡量注意,避免使用reset。

用法:

git  reset --hard  commit_id
  • --hard – 強制將緩存區和工作目錄都同步到你指定的提交
 git  reset --hard fdeb212a5418cc8e31f32d63cf197550297468ec
HEAD is now at fdeb212 增加mysql端口配置

然后在提交到遠端覆蓋。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM