第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 Git 里撤銷任何操作

如何在 Git 里撤銷任何操作

Git
侃侃無(wú)極 2018-11-26 04:00:27
如何在 Git 里撤銷任何操作
查看完整描述

1 回答

?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

任何一個(gè)版本控制系統(tǒng)中,最有用的特性之一莫過(guò)于 逗撤銷(undo)地操作。在Git中,逗撤銷地有很多種含義。

當(dāng)你完成了一次新的提交(commit),Git會(huì)及時(shí)存儲(chǔ)當(dāng)前時(shí)刻倉(cāng)庫(kù)(repository)的快照(snapshot);你能夠使用Git將項(xiàng)目回退到任何之前的版本。

下文中,我將列舉幾個(gè)常見(jiàn)的、需要逗撤銷地的場(chǎng)景,并且展示如何使用Git來(lái)完成這些操作。

一、撤銷一個(gè)公共修改 Undo a "public" change

場(chǎng)景:你剛剛用git push將本地修改推送到了GitHub,這時(shí)你意識(shí)到在提交中有一個(gè)錯(cuò)誤。你想撤銷這次提交。

使用撤銷命令:git revert

發(fā)生了什么:git revert將根據(jù)給定SHA的相反值,創(chuàng)建一個(gè)新的提交。如果舊提交是逗matter地,那么新的提交就是逗anti-matter地——舊提交中所有已移除的東西將會(huì)被添加進(jìn)到新提交中,舊提交中增加的東西將在新提交中移除。

這是Git最安全、也是最簡(jiǎn)單的逗撤銷地場(chǎng)景,因?yàn)檫@樣不會(huì)修改歷史記錄——你現(xiàn)在可以git push下剛剛revert之后的提交來(lái)糾正錯(cuò)誤了。

二、修改最近一次的提交信息 Fix the last commit message

場(chǎng)景:你只是在最后的提交信息中敲錯(cuò)了字,比如你敲了git commit -m "Fxies bug #42",而在執(zhí)行g(shù)it push之前你已經(jīng)意識(shí)到你應(yīng)該敲"Fixes bug #42"。

使用撤銷命令:git commit –amend或git commit --amend -m "Fixes bug #42"

發(fā)生了什么:git commit –amend將使用一個(gè)包含了剛剛錯(cuò)誤提交所有變更的新提交,來(lái)更新并替換這個(gè)錯(cuò)誤提交。由于沒(méi)有staged的提交,所以實(shí)際上這個(gè)提交只是重寫了先前的提交信息。

三、撤銷本地更改 Undo "local" changes

場(chǎng)景:當(dāng)你的貓爬過(guò)鍵盤時(shí),你正在編輯的文件恰好被保存了,你的編輯器也恰在此時(shí)崩潰了。此時(shí)你并沒(méi)有提交過(guò)代碼。你期望撤銷這個(gè)文件中的所有修改——將這個(gè)文件回退到上次提交的狀態(tài)。

使用撤銷命令:git checkout --

發(fā)生了什么:git checkout將工作目錄(working directory)里的文件修改成先前Git已知的狀態(tài)。你可以提供一個(gè)期待回退分支的名字或者一個(gè)確切的SHA碼,Git也會(huì)默認(rèn)檢出HEAD——即:當(dāng)前分支的上一次提交。

注意:用這種方法逗撤銷地的修改都將真正的消失。它們永遠(yuǎn)不會(huì)被提交。因此Git不能恢復(fù)它們。此時(shí),一定要明確自己在做什么?。ɑ蛟S可以用git diff來(lái)確定)

四、重置本地修改 Reset "local" changes

場(chǎng)景:你已經(jīng)在本地做了一些提交(還沒(méi)push),但所有的東西都糟糕透了,你想撤銷最近的三次提交——就像它們從沒(méi)發(fā)生過(guò)一樣。

使用撤銷命令:git reset或git reset --hard

發(fā)生了什么:git reset將你的倉(cāng)庫(kù)紀(jì)錄一直回退到指定的最后一個(gè)SHA代表的提交,那些提交就像從未發(fā)生過(guò)一樣。默認(rèn)情況下,git
reset會(huì)保留工作目錄(working
directory)。這些提交雖然消失了,但是內(nèi)容還在磁盤上。這是最安全的做法,但通常情況是:你想使用一個(gè)命令來(lái)逗撤銷地所有提交和本地修改——那
么請(qǐng)使用--hard參數(shù)吧。

五、撤銷本地后重做 Redo after undo "local"

場(chǎng)景:你已經(jīng)提交了一些內(nèi)容,并使用git reset –hard撤銷了這些更改(見(jiàn)上面),突然意識(shí)到:你想還原這些修改!

使用撤銷命令:git reflog和git reset, 或者git checkout

發(fā)生了什么:git reflog是一個(gè)用來(lái)恢復(fù)項(xiàng)目歷史記錄的好辦法。你可以通過(guò)git reflog恢復(fù)幾乎任何已提交的內(nèi)容。

你或許對(duì)git log命令比較熟悉,它能顯示提交列表。git reflog與之類似,只不過(guò)git reflog顯示的是HEAD變更次數(shù)的列表。

一些說(shuō)明:

1. 只有HEAD會(huì)改變。當(dāng)你切換分支時(shí),用git commit提交變更時(shí),或是用git
reset撤銷提交時(shí),HEAD都會(huì)改變。但當(dāng)你用git checkout --時(shí),
HEAD不會(huì)發(fā)生改變。(就像上文提到的情形,那些更改根本就沒(méi)有提交,因此reflog就不能幫助我們進(jìn)行恢復(fù)了)

2. git reflog不會(huì)永遠(yuǎn)存在。Git將會(huì)定期清理那些逗不可達(dá)(unreachable)地的對(duì)象。不要期望能夠在reflog里找到數(shù)月前的提交記錄。

3. reflog只是你個(gè)人的。你不能用你的reflog來(lái)恢復(fù)其他開(kāi)發(fā)者未push的提交。

因此,怎樣合理使用reflog來(lái)找回之前逗未完成地的提交呢看這要看你究竟要做什么:

1. 如果你想恢復(fù)項(xiàng)目歷史到某次提交,那請(qǐng)使用git reset --hard

2. 如果你想在工作目錄(working direcotry)中恢復(fù)某次提交中的一個(gè)或多個(gè)文件,并且不改變提交歷史,那請(qǐng)使用git checkout--

3. 如果你想確切的回滾到某次提交,那么請(qǐng)使用git cherry-pick。

六、與分支有關(guān)的那些事 Once more, with branching

場(chǎng)景:你提交了一些變更,然后你意識(shí)到你正在master分支上,但你期望的是在feature分支上執(zhí)行這些提交。

使用撤銷命令:git branch feature, git reset --hard origin/master, 和 git checkout feature

發(fā)生了什么:你可能用的是git checkout -b來(lái)建立新的分支,這是創(chuàng)建和檢出分支的便捷方法——但實(shí)際你并不想立刻切換分支。git
branch feature會(huì)建立一個(gè)叫feature的分支,這個(gè)分支指向你最近的提交,但是你還停留在master分支上。

git reset --hard將master回退至origin/master,并忽略所有新提交。別擔(dān)心,那些提交都還保留在feature上。

最后,git checkout將分支切換到feature,這個(gè)分支原封不動(dòng)的保留了你最近的所有工作。

七、事半功倍處理分支 Branch in time saves nine

場(chǎng)景:你基于master新建了一個(gè)feature分支,但是master分支遠(yuǎn)遠(yuǎn)落后與origin/master?,F(xiàn)在master分支與
origin/master同步了,你期望此刻能在feature下立刻commit代碼,并且不是在遠(yuǎn)遠(yuǎn)落后master的情況下。

使用撤銷命令:git checkout feature和git rebase master

發(fā)生了什么:你也許已經(jīng)敲了命令:git reset(但是沒(méi)用--hard,有意在磁盤上保存這些提交內(nèi)容),然后敲了git checkout -b,之后重新提交更改,但是那樣的話,你將失去本地的提交記錄。不過(guò),一個(gè)更好的方法:

使用git rebase master可以做到一些事情:

1.首先,它定位你當(dāng)前檢出分支和master之間的共同祖先節(jié)點(diǎn)(common ancestor)。

2.然后,它將當(dāng)前檢出的分支重置到祖先節(jié)點(diǎn)(ancestor),并將后來(lái)所有的提交都暫存起來(lái)。

3.最后,它將當(dāng)前檢出分支推進(jìn)至master末尾,同時(shí)在master最后一次提交之后,再次提交那些在暫存區(qū)的變更。



查看完整回答
反對(duì) 回復(fù) 2018-12-21
  • 1 回答
  • 0 關(guān)注
  • 693 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)