git push 命用於從將本地的分支版本上傳到遠程並合並。
命令格式如下:
git push <遠程主機名> <本地分支名>:<遠程分支名>
如果本地分支名與遠程分支名相同,則可以省略冒號:
git push <遠程主機名> <本地分支名>
git remote 獲取遠程主機名
git commit 后,沒有push ,怎么撤銷
如果是撤銷到commit 之前,本地修改也放棄,可以
使用git reset --hard ,
但是想保留本地修改,也想撤銷commit 可以使用
git reset --mixed HEAD^
除了mixed 還有其他兩個參數
git reset --soft HEAD^
--soft僅僅撤銷 commit
git reset --hard HEAD^
--hard 就全部撤銷了
示例 |
分支 |
說明 |
命令 |
---|---|---|---|
1 |
test01 |
撤銷最近1次commit |
git revert HEAD |
2 |
test02 |
撤銷某個commit |
git revert 3821210392184432de18b596cee58ab7924e39f9 |
3 |
test03 |
撤銷多個連續commit |
git revert b39476b9c730d312266fe9bc7f63e795f9ba856f 3821210392184432de18b596cee58ab7924e39f9 |
4 |
test04 |
撤銷多個非連續commit |
git revert b39476b9c730d312266fe9bc7f63e795f9ba856f 3821210392184432de18b596cee58ab7924e39f9 |
5 |
test05 |
重置為某個commit(不保存代碼) |
git reset –hard 55d3012564e94a39f6686c0e532c0459ddc41ec4 |
6 |
test6 |
重置為某個commit(保存代碼) |
git reset –soft 55d3012564e94a39f6686c0e532c0459ddc41ec4 |
Git撤銷&回滾操作(git reset 和 get revert)
Git 的工作流
工作區:在 git add xx 之前,在自己當前分支所修改的代碼內容!
暫存區:已經 git add xxx 進去,且沒有執行 git commit xxx 的。
本地分支:已經 git commit -m xxx 提交到本地分支的。
遠程分支:git push origin HEAD:refs/for/master HEAD 是本地,master是遠程分支
代碼回滾
在上傳代碼到遠程倉庫的時候,不免會出現問題,任何過程都有可能要回滾代碼:
1、在工作區的代碼(checkout ~ 修改工作區文件)
git checkout -- a.txt # 丟棄某個文件,或者
git checkout -- . # 丟棄全部
注意:git checkout – . 丟棄全部,也包括:新增的文件會被刪除、刪除的文件會恢復回來、修改的文件會回去。這幾個前提都說的是,回到暫存區之前的樣子。對之前保存在暫存區里的代碼不會有任何影響。對commit提交到本地分支的代碼就更沒影響了。當然,如果你之前壓根都沒有暫存或commit,那就是回到你上次pull下來的樣子了。
2、代碼 git add 到緩存區,並未 git commit 提交(reset ~ 修改暫存區文件)
git reset HEAD .
git reset HEAD a.txt
注意:這個命令僅改變暫存區,並不改變工作區,這意味着在無任何其他操作的情況下,
工作區中的實際文件同該命令運行之前 無任何變化
3、代碼 git commit 到本地分支,但沒有 git push 到遠程 (git reset --hard ~ commit 之后)
git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id> # 回到其中你想要的某個版本
git reset --hard HEAD^ # 回到最新的一次提交
git reset HEAD^ # 此時代碼保留,回到 git add 之前
4、代碼 git push 把修改提交到遠程倉庫 (git reset || git revert)
- (1)通過git reset是直接刪除指定的commit
git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>
git push origin HEAD --force # 強制提交一次,之前錯誤的提交就從遠程倉庫刪除
- (2) 通過git revert是用一次新的commit來回滾之前的commit
git log # 得到你需要回退一次提交的commit id
git revert <commit_id> # 撤銷指定的版本,撤銷也會作為一次提交進行保存
- (3) git revert 和 git reset的區別
(a). git revert是用一次新的commit來回滾之前的commit,此次提交之前的commit都會被保留( 會有 兩次 commit id);
(b). git reset是回到某次提交,提交及之前的commit都會被保留,但是此commit id之后的修改都會被刪除 ( 只有一次 commit id)
開發過程中,場景處理:
場景一: 糟了,我剛把不想要的代碼,commit到本地倉庫中了,但是還沒有做push操作!
撤銷
上述場景一,在未進行git push前的所有操作,都是在“本地倉庫”中執行的。我們暫且將“本地倉庫”的代碼還原操作叫做“撤銷”!

場景二:徹底完了,剛線上更新的代碼出現問題了,需要還原這次提交的代碼!
回滾
上述場景二,已進行git push,即已推送到“遠程倉庫”中。我們將已被提交到“遠程倉庫”的代碼還原操作叫做“回滾”!
注意: 對遠程倉庫做回滾操作是有風險的,需提前做好備份和通知其他團隊成員!
如果你每次更新線上,都會打tag,那恭喜你,你可以很快的處理上述場景二的情況

二者區別:
revert是放棄指定提交的修改,但是會生成一次新的提交,需要填寫提交注釋,以前的歷史記錄都在;
reset是指將HEAD指針指到指定提交,歷史記錄中不會出現放棄的提交記錄。
場景三:剛才我發現之前的某次提交太愚蠢了,現在想要干掉它!
情況三:需要回滾某次提交
找到要回滾的commitID
git log
git revert commitID
刪除某次提交
git log --oneline -n5
git rebase -i "commit id"^
注意:需要注意最后的^號,意思是commit id的前一次提交
git rebase -i "5b3ba7a"^
在編輯框中刪除相關commit,如pick 5b3ba7a test2,然后保存退出(如果遇到沖突需要先解決沖突)!
git push origin master -f
通過上述操作,如果你想對歷史多個commit進行處理或者,可以選擇git rebase -i,只需刪除對應的記錄就好。
rebase還可對 commit 消息進行編輯,以及合並多個commit。
git commit 后,沒有push ,怎么撤銷
如果是撤銷到commit 之前,本地修改也放棄,可以
使用git reset --hard ,
但是想保留本地修改,也想撤銷commit 可以使用
git reset --mixed HEAD^
除了mixed 還有其他兩個參數
git reset --soft HEAD^
--soft僅僅撤銷 commit
git reset --hard HEAD^
--hard 就全部撤銷了