git 正常提交流程:
git add . //所有文件提交到暫存區
git commit -m "本功能全部完成" //將提交文件提交到版本庫
- 執行完add后,想撤回add,怎么辦?
git status // 先看一下add 中的文件
git reset HEAD ***** //如果后面什么都不跟的話 就是上一次add 里面的全部撤銷了
- 執行完commit后,想撤回commit,怎么辦?
git reset HEAD main.c; 將待刪除的文件由暫存區恢復到工作區 //將之前添加到暫存區的的內容從暫存區移除
git checkout -- main.c; 將工作區的修改丟棄; //丟棄相對於暫存區中最后一次添加文件所作的變更
或者:
git reset --soft HEAD^ //這樣就成功的撤銷了你的commit 注意,僅僅是撤回commit操作,您寫的代碼仍然保留。
注釋:
HEAD^的意思是上一個版本,也可以寫成HEAD~1,如果你進行了2次commit,想都撤回,可以使用HEAD~2
相關參數:
- --mixed
意思是:不刪除工作空間改動代碼,撤銷commit,並且撤銷git add . 操作 這個為默認參數,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一樣的。
- --soft
不刪除工作空間改動代碼,撤銷commit,不撤銷git add .
- --hard
刪除工作空間改動代碼,撤銷commit,撤銷git add .
注意完成這個操作后,就恢復到了上一次的commit狀態。
git rm與git rm --cached
當我們需要刪除暫存區
或分支
上的文件, 同時工作區也不需要這個文件了, 可以使用
1 git rm file_path 2 git commit -m 'delete somefile' 3 git push
當我們需要刪除暫存區
或分支
上的文件, 但本地又需要使用, 只是不希望這個文件被版本控制, 可以使用
git rm --cached file_path git commit -m 'delete remote somefile' git push
git rm 與 操作系統的 rm 本質是一樣的
區別:
- git rm main.c 完成
1.刪除文件
2.將刪除文件納入暫存區;
回退刪除之前:
git reset HEAD main.c; 將待刪除的文件由暫存區恢復到工作區
git checkout -- main.c; 將工作區的修改丟棄;
- rm 完成刪除文件,但不將刪除文件納入緩存區
回退刪除之前:
git checkout -- main.c; 將工作區的修改丟棄;
git mv 重命名
- git mv 源文件名 新文件名 //修改完成會被納入暫存區
git mv main.c test.c
回退修改前
git reset HEAD main.c; 將待刪除的文件由暫存區恢復到工作區
git checkout -- main.c; 將工作區的修改丟棄;
- mv 源文件名 新文件名 //修改完成 並未納入暫存區
git mv main.c test.c
回退修改前
git checkout -- main.c; 將工作區的修改丟棄;
如果commit注釋寫錯了,改注釋
git commit --amend
此時會進入默認vim編輯器,修改注釋完畢后保存就好了
或者 git commit --amend -m "修正的消息"