git reset/revert 就是程序員的后悔藥。主要總結了reset,懂了reset自然就懂了revert(更安全的reset,后悔藥的后悔藥),但是git reset 會有更干凈的commit路徑。
常用格式
-
git reset [option] [commit]//重制指定提交,可以具體指定到文件,否則就是所有文件。
# 重置前一次提交的filename.java,會丟棄所有修改沒有任何保留。
git reset --hard head^ filename.java
-
git reset head [file list]// 重制為當前提交,一般用于重制暫存區(qū)到工作區(qū)。 -
git reset head^// 重制到當前提交的前次提交 -
git reset head~n// 重制到當前提交的前n此提交,即在這次提交之后提交都刪除, head^ 相當于head~1 -
git reset [commit-hash/tag name]// 可以指定提交的hash值或者tag名
選項詳解
options: 如果會把重置的內容放到哪個位置,哪個位置就不能有和重置內容相同的文件。
--mixed// 重置提交和暫存區(qū),即所有被重置的提交(和暫存區(qū))的修改都放到工作區(qū), 默認選項。在可能情況下不會影響工作區(qū)原有內容。--soft// 重置提交, 即被重置的提交的修改放到暫存區(qū)。在可能情況下不會影響暫存區(qū)和工作區(qū)原有內容。--hard// 重置提交, 暫存區(qū),工作區(qū)。將丟失所有被重置的修改。--merge// 保留工作區(qū),直接丟棄暫存區(qū)的修改,丟棄所有重置的提交 。。--keep// 保留工作區(qū),把暫存區(qū)的內容放到工作區(qū)(兩個區(qū)中不能有相同的文件),丟棄所有重置的提交。