取消修改,恢復(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