版本回退
有兩種方法
1、Revert操作
Revert操作會當(dāng)成一個新的提交記錄,追加到提交日志當(dāng)中,這樣便保留了原來的提交記錄。(推薦)
2、利用IDEA的Reset Head指針
Reset Head指針,會拋棄原來的提交記錄,使Head指針強(qiáng)制指向指定的版本。
Revert:回退,Reset:重置
Revert
重新提交到本地倉庫(見下圖),可以看到增加了回退代碼的提交記錄
這種回退的好處在于,如果后悔了“回退”這個操作,也可以回退到?jīng)]有回退之前的版本。因?yàn)闅v史記錄還保留提交記錄。
Reset
HEAD^的意思是上一個版本,也可以寫成HEAD~1
如果你進(jìn)行了2次commit,想都撤回,可以使用HEAD~2
mixed
在所選提交點(diǎn)之后所做的更改將被保留,但不會保留已提交;
適合于提交的內(nèi)容有誤,只想修正回來就可以了這種情況。
默認(rèn)參數(shù),git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一樣的。
soft
在選定提交點(diǎn)之后所做的所有更改都將被暫存(可以在 Version Control 窗口Local Changes查看它們)。
hard
在所選提交點(diǎn)之后所做的所有更改都將被丟棄(工作空間的改動、已暫存的、已提交的)。
Keep
在選定的提交點(diǎn)之后所做的提交更改將被丟棄,但本地更改將保持不變。
如果不指定reset的模式,默認(rèn)使用 -mixed模式。
Mixed
Hard
Mixed 和 Soft區(qū)別:
回退點(diǎn)之后的所有更改都將會保留,但一個會被git追蹤下來,一個不會被追蹤。
git追蹤 ?
意思是回退后,提交點(diǎn)后新增的類、XML等等文件 (不包括修改的文件),Soft 方式回退的會出現(xiàn)在 Default ChangeList下面,Mixed 方式回退的會出現(xiàn)在 Unversioned Files下面。
提交點(diǎn)后修改的文件兩種回退方式都會出現(xiàn)在Default ChangeList下面
reset操作步驟
方式一
1、在提交記錄中選擇對應(yīng)版本回退
2、這樣本地倉庫就回退到了對應(yīng)的版本,但這時同步遠(yuǎn)程倉庫會提示Push拒絕。
打開Terminal標(biāo)簽,在本項(xiàng)目目錄下,輸入git push -f 強(qiáng)制同步遠(yuǎn)程倉庫。
方式2:
1、在“Show History”中找到當(dāng)前版本號(取名:newVersion)和想要回退到的版本號(oldVersion);Hard方式回退到 oldVersion;
2、這時候 push會沖突,然后再 Mixed方式回退到 newVersion;
這時你會發(fā)現(xiàn),最新版本回到 newVersion。但是代碼還是 oldVersion的代碼,這時候重push到遠(yuǎn)程倉庫就不會版本沖突了(Mixed會保留提交點(diǎn)之后的修改)。
但是,不管哪種方式同步,git日志都會丟失版本1以后的提交。所以不推薦Reset方式回退版本
小結(jié)
Revert:其實(shí)也是設(shè)置Head指針。可以后悔,
Reset 中g(shù)it push -f 強(qiáng)制同步操作不推薦使用,在團(tuán)隊(duì)協(xié)作環(huán)境中可能會引發(fā)問題;
順便說一下,如果commit注釋寫錯了,只是想改一下注釋,只需要: