git的回滾相關(guān)

轉(zhuǎn)自git的使用

取消修改,恢復(fù)版本

取消對單個(gè)文件的修改

這里指未commit的文件

git checkout -- <file>

取消所有未提交的修改

git clean -xdf   
or
git checkout .

撤銷git commit(未push)

  • 找到上次git commit的 id
    git log
    找到你想撤銷的commit_id
    比如下面就是我git log輸出的最近兩次commit,test是已經(jīng)push到遠(yuǎn)程倉庫的,test1是最新commit但沒push的。如果我們想撤銷test1這次的提交,則我需要的就是test這次的commit_id。
commit a5febeebf141dbd9a022dfe96a46cad9d474a5ad
Author: zhengqidian <zhengqidian@dasheng.com>
Date:   Mon Sep 18 23:07:04 2017 +0800
    test1
commit 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17
Author: zhengqidian <zhengqidian@dasheng.com>
Date:   Mon Sep 18 22:57:47 2017 +0800
    test
  • git reset --hard commit_id
    完成撤銷,同時(shí)將代碼恢復(fù)到commit_id 對應(yīng)的版本。
    如上一個(gè)例子中就是:
 git reset --hard 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17  
git reset commit_id
  • 完成Commit命令的撤銷,但是不對代碼修改進(jìn)行撤銷,可以直接通過git commit 重新提交對本地代碼的修改。
    如上一個(gè)例子中就是:
 git reset 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17  

暫存到stash

git stash
//恢復(fù)
git stash pop

回滾

Revert 撤銷一個(gè)提交的同時(shí)會創(chuàng)建一個(gè)新的提交。這是一個(gè)安全的方法,因?yàn)樗粫貙懱峤粴v史。

比如下面的這個(gè)例子的提交,如果我們不想要test1的這次提交了,上面我說過用git reset --hard test_commit_id,但這是在test1這次提交未push的情況下。
如果test1這次提交已經(jīng)push的話就應(yīng)該使用git revert test1_commit_id,這樣的話代碼就會把test1這次的代碼修改進(jìn)行撤銷并重新生成一次commit,這樣的話test1的這次commit還是存在于工作樹上的,保持了工作樹的干凈。

commit a5febeebf141dbd9a022dfe96a46cad9d474a5ad
Author: zhengqidian <zhengqidian@dasheng.com>
Date:   Mon Sep 18 23:07:04 2017 +0800
    test1
commit 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17
Author: zhengqidian <zhengqidian@dasheng.com>
Date:   Mon Sep 18 22:57:47 2017 +0800
    test

git revert a5febeebf141dbd9a022dfe96a46cad9d474a5ad
回滾之后git log如下面所示:

commit b80d6e00853f386159aa4a17ab40d9d375ad71d0
Author: zhengqidian <zhengqidian@dasheng.com>
Date:   Mon Sep 18 23:37:00 2017 +0800
    Revert "test1"
    This reverts commit a5febeebf141dbd9a022dfe96a46cad9d474a5ad.
commit a5febeebf141dbd9a022dfe96a46cad9d474a5ad
Author: zhengqidian <zhengqidian@dasheng.com>
Date:   Mon Sep 18 23:07:04 2017 +0800
    test1
commit 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17
Author: zhengqidian <zhengqidian@dasheng.com>
Date:   Mon Sep 18 22:57:47 2017 +0800
    test

回滾中間很大一部分commit,其中有merge commit

回滾

git reset --hard 4
git reset --soft 8
git commit -m 'Reverted 5 6 7 8'

其實(shí)樓主怕的是丟失提交記錄,而不是使用 reset rebase 命令

查看當(dāng)前分支是基于哪個(gè)分支創(chuàng)建的

 git reflog show <branchName>

檢查本地的代碼修改情況

git diff 可以查看當(dāng)前沒有add 的內(nèi)容修改(不在緩沖區(qū)的文件變化)

git diff --cached查看已經(jīng)add但沒有commit 的改動(dòng)(在緩沖區(qū)的文件變化)

git diff HEAD 是上面兩條命令的合并

查看未git push到遠(yuǎn)程代碼庫的git commit

git status 只能查看未傳送提交的次數(shù)

git cherry -v 只能查看未傳送提交的描述/說明

git log master ^origin/master 則可以查看未傳送提交的詳細(xì)信息

輸入用戶名和密碼

https協(xié)議push的時(shí)候需要輸入用戶名和密碼問題:

git config --global credential.helper store

然后你會在你本地生成一個(gè)文本,上邊記錄你的賬號和密碼。

pull 或者 push 一個(gè)大項(xiàng)目時(shí)報(bào)錯(cuò)

errno 56,那么應(yīng)該是有大文件或者提交緩存方面的問題。而 errno 54 則不是這個(gè)問題。對于 56 錯(cuò)誤的解決方式與網(wǎng)絡(luò)上大部分文章的一致。都是增大緩存配置,比如下面就是配置提交緩存為 500M。

git config http.postBuffer 524288000
git config https.postBuffer 524288000
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容