Blog Cover Image

Inspire you to have New thinking, Walk out your unique Road.

有的時候,你無意間遇到的一些故事,會激發你的靈感,改變你的想法,接下來你會用與之前全然不同的觀念去創造屬於你獨特的故事。

Sign @MinaYu.

[技術小筆記] Git 指令

Posted on

最基礎的git 指令被隱藏在先前的後端小菜鳥學習筆記內,有機會再把他整理出來

後端小菜鳥學習筆記系列是當初上班太忙碌,資訊又不斷的往我的腦袋塞(雖然現在也差不多啦XDDDD)

然後暫時還想不出更好的寫作方法時,只好利用日記記錄去記錄每一天

造成每天都很長,且夾雜一堆不同的資訊的文章出現

雖然當初確實是想要紀錄每天每天的練習,可是現在往回看會發現

恩,好長好混亂還是把它分散好了

這邊紀錄些git用法,但還是強烈建議知道原理,比記每個指令會好一點

git log -p

# 強制推上github
git push -f

# 在還未push上github前, 觀看更改前與更改後的不同
git diff

# 在還未push上github前, reset所有更改紀錄
git reset --hard





# 可去抓遠端的branch
$ git fetch --all
$ git checkout <branch>

講一下 squash, 因為我有慘痛經驗QQ

做 squash,是將很多次commit整併/合併成一次(或幾次)的動作

假設你commit 18次(如我), 中間都是很多只有細小改動,那就可以使用squash去整併成一個commit

# 利用log 來找出要整併的分支的前一個動作版本碼 git log
$ git log

會看到很多個commit的紀錄
commit xxxxxxxxxxxx__d394g04329oooooooooooooooo (版本號碼)
...
...

commit xxxxxxxxxxxx____h949k929d031__oooooooooo
...
...

找到你第一個commit的前一個commit的版本碼當base基底 因為你要將所有你的commit做合併,所以你必須抓在你還沒修改任何程式碼 還沒做任何commit的那一個版本碼!!

找到版本碼後,下這個指令來進行squash 動作 git rebase -i [版本碼]

$ git rebase -i [版本碼]

此時會進到一個畫面




pick 01d1124 Complete feature.
pick 6340aaa Rewrite Unit Text.
pick ebfd367 Add new function.
pick 30e0ccb Seperate function to other file.

# Rebase 60709da..30e0ccb onto 60709da
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.

下方會有做更改的解釋

squash 簡寫是 s

將先前的commit做squash 合併,僅留最後一個commit

pick 01d1124 Complete feature.
squash 6340aaa Rewrite Unit Text.
squash ebfd367 Add new function.
squash 30e0ccb Seperate function to other file.

改好後存檔離開

:wq

接著會跳到下一個頁面,這邊是要輸入合併後的commit 訊息要是什麼

# your commit_1 message
第一個訊息
# your commit_2 message
第二個
# your commit_3 message
...
# your commit_4 message
...
# your commit_5 message

若是我,我就將這些訊息砍掉後,寫一行(或者多行),解釋你這個commit做了什麼事

寫完以後存檔離開

:wq

將新更改好的commit 要強制推上

$ git push -f

若這中間不小心錯掉了,可以用這個指令來捨去這個squash

$ git rebase --abort

他有提供下列兩個指令,不過我看不懂啦XD

$ git rebase --edit-todo




$ git rebase --continue

再講一個,當你開發的分支branch behind進度的時候怎麼辦呢?

# 先切到 主支做更新進度
$ git checkout [主進度的主支]
$ git pull


# 將分支原先的基底(就是從舊進度繼續做),更新新的基底
# 用rebase
$ git checkout [你的分支]

$ git rebase [主進度的主支]

就將分支的進度接到目前最新進度上囉!

參考資料

http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

找資料時,找到一個很厲害的blog

https://devhints.io/