git add后取消_git 必看,各种撤销操作
場(chǎng)景概念說明
首先說明一個(gè)概念, git是一個(gè)分布式的版本控制工具,分布式即 git 管理的項(xiàng)目是有多個(gè)大致平等的倉庫的。通過一個(gè)例子來說明這個(gè)東西。
舉一個(gè)最簡(jiǎn)單的使用場(chǎng)景: 你在github 建立了一個(gè)項(xiàng)目, 然后把已經(jīng)初始化的項(xiàng)目拉到了本地(或者從本地push了內(nèi)容到github)。 即: 此時(shí)github 和你本地都有了項(xiàng)目,且二者,已經(jīng)建立了聯(lián)系。
此時(shí)這一個(gè)項(xiàng)目既有了兩個(gè)倉庫,一個(gè)在github 的遠(yuǎn)端倉庫,一個(gè)在本地的本地倉庫。 如果是兩人合作,則會(huì)有兩個(gè)本地倉庫。 雖然主觀上,把github上的倉庫視為主倉庫,但是我們可以通過一些操作,把任一倉庫變更為新的主倉庫。 即: 這些倉庫的地位沒有實(shí)質(zhì)上的差別。可以做如下轉(zhuǎn)換:
不熟練就先備份
不熟練的話,做感覺有危險(xiǎn)的操作前,先備份。
可以使用 git stash,備份當(dāng)前的修改,想要恢復(fù)的時(shí)候,直接使用 檢出即可。 或者干脆 git checkout -b newBranch, 備份一個(gè)新分支。 備份 不是今天的主要話題,就不展開講了。
撤銷操作--僅變動(dòng)本地的代碼
取消文件的修改
git checkout fileName, 這個(gè)命令會(huì)從本地倉庫里檢出文件,覆蓋掉 指定文件的修改。 本地倉庫 即已經(jīng)commit 提交到本地倉庫的代碼。把指定的文件名換成‘ . ’ 即為選擇全部的意思。
取消 git add 操作
git reset --mixed 僅取消 git add 帶來的效果。 即本地的修改還在,但是取消了add 的狀態(tài)。
回退到指定到 commit號(hào)
git reset --hard commitId, 這個(gè)命令 回退到指定的commit,并且不會(huì)保留本地尚未提交的修改。所以一定要慎重使用。
取消commit時(shí),更安全的操作: revert
更安全的操作, 使用 git revert
git revert commitId,會(huì)撤銷指定的commit,但是與 reset --hard 不同的是,revert 不會(huì)丟掉被撤銷的commit,而是會(huì)生成一個(gè)新的commit,其所有操作與指定的commit 相反,以此來覆蓋掉該commit 的修改。
舉個(gè)栗子: 按序有三個(gè)commit: c1, c2, c3。 現(xiàn)在我們位于c3. 使用 git commit --hard c2, 則當(dāng)前狀態(tài)會(huì)退回到 c2, git log, 只會(huì)看到,c2、c1. 而 如果使用git revert c2,則會(huì)新添加一個(gè)c4的commit,c4的操作與c2 完全相反。 git log 可以看到 1 ~ 4 全部的commit。
如果你想撤銷遠(yuǎn)端的代碼呢
如果使用了revert,直接 git push 即可。
如果使用的是git reset,或者 rebase到了之前的commit; 在更改了本地代碼以后,git push -f。
-f 一定慎用,如果涉及到遠(yuǎn)端主分支,干脆就不要用。
涉及遠(yuǎn)端的,還是推薦用 revert
歡迎批評(píng)與指正。
總結(jié)
以上是生活随笔為你收集整理的git add后取消_git 必看,各种撤销操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dataguard日志传输模式解析_网络
- 下一篇: adb 获取当前activity_ADB