Git命令總結

Git 後悔藥,指的是咱們操做本地代碼以後想要恢復以前的代碼,所須要作的一系列操做,好像是作過後悔了,想要吃後悔藥同樣,生活中雖沒有後悔藥,可是 git 的世界中是存在的哦!

系列一:add 以前,也就是尚未添加到暫存區以前

# 注意跟切換分支不要搞混了,這個有兩個橫線,放棄對單個文件的修改
git checkout -- filename

# 放棄對全部文件的修改
git checkout .

<!--more-->git

系列二:add以後,commit以前

# 單個文件回到修改以後,add以前
git reset HEAD filename

# 全部文件回到修改以後, add以前
git reset HEAD .

系列三:commit 以後,push以前

# 回到add以後,commit以前
git reset --soft HEAD^

# 回到修改以後,add以前
git reset --mixed HEAD^

# 回到修改以前,放棄對文件的修改
git reset --hard HEAD^

# 能夠恢復到以前任意版本
git reset --hard 提交版本號

反作一個版本,生成一個新的提交

# 例若有三次提交,提交一、提交二、提交3,假如提交2版本有問題,想要撤銷,可是不想影響以後的提交3 的內容,這就能夠反作提交2
git revert -n 版本號
# 反作以後會自動生成一個新的提交,這個提交會撤銷提交2,而保留提交3
#這裏可能會出現衝突,那麼須要手動修改衝突的文件。並且要git add 文件名

合併分支之rebase

#切換到主分支
git checkout main
# 拉取最新代碼
git pull
# 切換到開發分支
git checkout dev
# 將本地屢次提交合併成一次提交,好處是隻須要解決一次衝突
git rebase -i HEAD~2  #合併提交 --- 2表示合併兩個
# 同步主分支的最新代碼到dev分支
git rebase main  #---->解決衝突--->git rebase --continue
# 切換回主分支
git checkout main
# 在主分支上合併 dev 分支
git merge dev
# 推送遠程
git push

## 記錄功能
git rebase --abort #會放棄合併,回到rebase操做以前的狀態,以前的提交的不會丟棄;

git rebase --skip #則會將引發衝突的commits丟棄掉(慎用!!);

git rebase --continue #合併衝突,結合"git add 文件"命令一塊兒用與修復衝突,提示開發者,一步一步地有沒有解決衝突。

一次性回退多個提交,並把log合併爲一條git revert + git rebase,

git revert 597ace36
:wq
git revert f187d3ef
:wq
git revert d301fafe
:wq
# 回退了三個版本以後會生成三個新的log
# 而後能夠使用rebase 合併三個新的log
git rebase -i 597ace36  #也能夠HEAD~3至關於合併三個提交歷史
# 注意 -i 後面的參數是不須要合併的 commit 的 hash 值,這裏即從當前時間往前推的第四個提交,包括新生成的三個提交log
#pick 的意思是要會執行這個 commit
#squash 的意思是這個 commit 會被合併到前一個commit
# 把後面兩個pick修改爲 squash
:wq
# 而後進入編輯合併日誌的模式,把其中兩個 Revert 註釋註釋掉,只剩一個合併日誌以下:
#Revert "後悔藥系列,revert三個以後合併爲一個註釋rebash"
    
#   This reverts commit 597ace360be8f00575bae40d5bf9bfea551a1c48.
    
#   This reverts commit f187d3ef9c9eb0de74b4ad6c0fa5854b0e612539.
    
#   This reverts commit d301fafe75cb5fadf5b98f0711c39243e4174e34.

:wq

分支建立系列

# 基於當前分支建立並切換到本地新分支,新分支dev
git checkout -b dev

# 基於遠程dev分支建立新的本地分支,本地沒有dev分支呢
git chechout -b dev origin/dev

# 提交本地分支到遠程
git push origin dev:dev

# 刪除遠程分支,至關於推送一個空分支到遠程分支
git push origin :dev

# 本地切換分支
git checkout dev

# 刪除本地分支
git branch -d dev

# 設置本地分支與遠程分支的關聯,設置關聯以後,若是隻有一個關聯能夠直接git push
git push --set-upstream origin dev
# 也能夠寫全
git branch –set-upstream dev origin/dev
# 查看本地分支與遠程關聯
git branch -vv
# 若是隻有一個關聯,則能夠使用git push直接提交,省略後面的

如何緊急切換分支?如何先 pull 在提交代碼

# 當臨時須要去別的分支解決問題,又不想提交當前分支沒寫完的代碼
git stash save "隱藏當前沒寫完的代碼"
# 這時候就能夠切換分支操做了,解決完回來以後進行以下操做

# 查看隱藏的列表
git stash list
# 若是執行此命令會直接刪除隱藏列表,若是隻有一條剛纔的隱藏記錄,直接用能夠,用完以後以前隱藏的代碼就回來了,還會刪除隱藏列表
git stash pop
# 若是隻想代碼回來,不刪除隱藏列表,能夠執行,stash@{0},恢復隱藏列表中的stash@{0}的代碼
git stash apply stash@{0}


# 提交代碼以前,能夠先隱藏本身代碼,而後pull,以後pop放出本身隱藏的代碼,解決衝突,提交,這樣能夠減小合併的代碼
git stash save "隱藏本身代碼"
git pull
git stash pop
# 解決衝突
# 其中Updated upstream 和=====之間的內容就是pull下來的內容,====和stashed changes之間的內容就是本地修改的內容。碰到這種狀況,git也不知道哪行內容是須要的,因此要自行#肯定須要的內容。
#解決完成以後,就能夠正常的提交了。
git add .
git commit -m "註釋"
git push
# 注意,發生衝突以後,即便git stash pop,代碼也取出來了,可是git stash list中的貯存代碼記錄依然存在
# 這時候由於代碼取出來了,因此能夠直接刪除list中的記錄
# 不加參數默認刪除最新的編號爲stash@{0}的記錄
git stash drop

# 或者本身指定刪除的編號
git stash drop stash@{0}

遠程刪除了一些分支,本地還存在怎麼辦?

# 同步本地和遠程的分支
git remote prune origin
# 用新的提交替換上一次提交,若是沒有改動,則替換上一次的提交註釋
git commit --amend -m "替換上次提交"
# 查看當前分支的最近幾回提交
git reflog

合併分支

# 例如把dev分支合併到main分支
# 首先切換到main分支,並保證全部提交均最新,都pull過了
git checkout main
git merge dev
# 若是有衝突解決衝突,以後push到遠程就能夠了

關注我,更多精彩文章第一時間推送給你

Java之康莊大道

相關文章
相關標籤/搜索