前言:
IDEA 中 Git 文件顏色
白色:已經(jīng)加入版本控制,已提交,無(wú)改動(dòng)
藍(lán)色:已經(jīng)加入版本控制,已提交,有改動(dòng)
綠色:已經(jīng)加入版本控制,還未提交
紅色:未加入版本控制
Git 本地?cái)?shù)據(jù)管理-三大區(qū)
工作區(qū),暫存區(qū),版本庫(kù)
● 工作區(qū):項(xiàng)目目錄,開(kāi)發(fā)存放代碼的地方。
● 暫存區(qū):數(shù)據(jù)暫時(shí)存放的地方。待提交區(qū),存放有修改的文件的地方。git add 之后,commit 之前
● 版本庫(kù)(本地倉(cāng)庫(kù)):存放已經(jīng)提交的數(shù)據(jù)。commit 之后,push 時(shí),就是把這個(gè)區(qū)的數(shù)據(jù) push 到遠(yuǎn)程倉(cāng)庫(kù)
開(kāi)發(fā)者在工作區(qū)對(duì)代碼進(jìn)行修改,修改的文件 git add 添加到暫存區(qū),然后把暫存區(qū)的代碼 commit 提交到版本庫(kù),最后把版本庫(kù)中的數(shù)據(jù) push 到遠(yuǎn)程倉(cāng)庫(kù)。ps:此圖copy某位大佬的,畫(huà)得真好
提交錯(cuò)了,還未 push 時(shí)回退此次提交
Undo Commit:commit了,但未push時(shí)
● 比較常用,比如說(shuō)忘了切分支,不小心在master分支上做了修改,并commit了,但還沒(méi)有push,想要撤回提交,但不想丟棄掉剛剛修改的內(nèi)容,就可以使用 Undo Commit。
● 只是 commit 了,并沒(méi)有 push 時(shí),使用 Undo Commit,會(huì)把提交的代碼恢復(fù)成未提交,并且那條提交記錄也不復(fù)存在
Revert Commit:commit了,但未push時(shí)
● 只是 commit 了,并沒(méi)有 push 時(shí),使用 revert commit,會(huì)丟失掉這條提交的修改內(nèi)容,并且會(huì)多生產(chǎn)一條 Revert 的提交記錄
Drop Commit:commit了,但未push時(shí)
● 慎用
● 只是 commit 了,并沒(méi)有 push 時(shí),使用 drop commit,不僅那條提交記錄的修改數(shù)據(jù)被丟棄掉了,連著提交記錄也被刪除了
提交錯(cuò)了,并 push 到了遠(yuǎn)程時(shí)回退此次提交
Revert Commit:commit+push
比較常用,比如業(yè)務(wù)提了一個(gè)需求,我開(kāi)發(fā)完了,并且 push 到了 dev,后面又說(shuō)這個(gè)需求不用了,這個(gè)時(shí)候就需要用到 revert commit 把這次提交的修改回滾掉。
單個(gè)分支示例:
多個(gè)分支示例:
● dev 開(kāi)發(fā)分支
● 從 master/dev 分支切出一個(gè) bugfix-01 分支
● 其他分支的修改往 dev 合
使用 revert commit
● 在 bugfix-01 分支上進(jìn)行 revert commit:commit 后直接 push。 該分支此次提交的內(nèi)容會(huì)被丟棄,并生成一條 Revert 的提交記錄。然后把該分支往 dev 上合并,這樣 dev 上的這個(gè)修改的內(nèi)容也會(huì)被丟棄。
● 在 dev 分支上進(jìn)行 revert commit:commit 后直接 push。dev 分支此次提交的內(nèi)容會(huì)被丟棄,但 bugfix-01 分支上還保留著這次的修改。
○ 適用場(chǎng)景:bugfix-01 分支的內(nèi)容還未測(cè)試通過(guò),不小心合到了生產(chǎn)環(huán)境(master),這個(gè)時(shí)候就只能在 master 分支上對(duì)此次提交內(nèi)容進(jìn)行 revert commit,而不在 bugfix-01 分支上進(jìn)行,應(yīng)該 bugfix-01 還需要在這次修改的基礎(chǔ)上繼續(xù)修改
以上都是單個(gè)提交點(diǎn)的情況,多個(gè)提交點(diǎn)時(shí):
Reset 使用
reset current branch to here:重置當(dāng)前分支到此提交點(diǎn)。和 Revert 完全不同,revert 是只回滾當(dāng)前提交點(diǎn)的內(nèi)容,而 reset 是當(dāng)前提交點(diǎn)后的修改內(nèi)容全部回滾。reset 不會(huì)生成新的提交點(diǎn),revert 會(huì)生成新的提交點(diǎn)。reset 得強(qiáng)制 push,revert 正常 push 即可。
reset current branch to here:Soft
● Soft:此提交點(diǎn)往后的修改會(huì)回到待提交區(qū),本地其他的修改也不會(huì)被丟棄。強(qiáng)制 push 后,該提交點(diǎn)往后的提交記錄都會(huì)被刪除
reset current branch to here:Mixed
● Mixed:此提交點(diǎn)往后的修改會(huì)回到待提交區(qū),本地其他的修改會(huì)被放到工作區(qū),而不是暫存區(qū)(待提交區(qū))。強(qiáng)制 push 后,該提交點(diǎn)往后的提交記錄都會(huì)被刪除
reset current branch to here:Hard
● Hard:慎用。此提交點(diǎn)往后的修改會(huì)不回到待提交區(qū),而是直接被丟棄。本地其他的修改也會(huì)被丟棄。強(qiáng)制 push 后,該提交點(diǎn)往后的提交記錄都會(huì)被刪除
reset current branch to here:Keep
● Keep:此提交點(diǎn)往后的修改不會(huì)回到待提交區(qū),而是直接被丟棄。本地其他的修改會(huì)被放到工作區(qū),而不是暫存區(qū)(待提交區(qū))。強(qiáng)制 push 后,該提交點(diǎn)往后的提交記錄都會(huì)被刪除
IDEA git 代碼臨時(shí)儲(chǔ)藏區(qū)(Stash Changes)
Stash Changes:暫存變動(dòng)
Unstash Changes:恢復(fù)暫存變動(dòng)
如果本地文件有改動(dòng),且和服務(wù)器最新版本有沖突,pull 更新時(shí)會(huì)提示錯(cuò)誤,無(wú)法更新;或者切換到其他分支時(shí),會(huì)提示沖突;此時(shí)要么 commit 自己的改動(dòng)再 pull,要么使用 Stash Changes 將改動(dòng)先存儲(chǔ)下來(lái)再 pull。
stash 的好處就是可以先將改動(dòng)暫存到本地倉(cāng)庫(kù)中,不用擔(dān)心 push 到服務(wù)器,因?yàn)?Stash Changes 的內(nèi)容不參與 commit 和 push。而且,stash 中的改動(dòng)可以隨時(shí)取出來(lái)(Unstash Changes)再用
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-754274.html
Cherry-Pick
● 獲取某一個(gè)分支的單筆提交,并作為一個(gè)新的提交引入到你當(dāng)前分支上文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-754274.html
到了這里,關(guān)于idea中g(shù)it相關(guān)知識(shí)(revert,reset,stash/unstash changes使用)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!