目錄

一堆git反悔操作教學

$ git reset HEAD^ #還沒使用mtk_repo upload至gerrit時,把某次提的commit退回至上一個HEAD

如果只要合併Branch中某個Commit

$ git checkout <commit-id>
$ git branch <branch-name>

Merge & Fast Forward

Git 的 Merge 與 Fast-Forward: 簡單明瞭的好文章

  • Fast-Forward

    $ git merge b-01
  • 非Fast-Forward

    $ git merge —-no-ff b-01

在local端開新Branch

$ git checkout -b <new-branch>

Rebase的意義

本地端:

遠端倉庫:

假設在這一條頻繁變動的Local/Remote Branch上,而今天想要push一筆commit 166c86 到remote branch上

$ git push origin master

但因為遠端可能有一些昨天其他人的commit be5a04a ,於是push就失敗了,若此時下達

$ git pull origin master

會產生一筆不必要的Merge,用來將自己原先要push的commit,Merge在master branch上

這時候就可以使用rebase了,就不會多一個無謂的Merge

##$ git reset HEAD^ ##若要返回到git pull之前的狀態
$ git pull --rebase

git stash時帶上附註(tag)

git stash save --keep-index "<tag>"
--keep-index: 只stash unstaged file,staged的file會保存下來

為什麼要signed-off-by?

Reference

Short answer: 為了證明Patch是你的
Long answer: 在Linux核心開發中,大多使用E-mail來溝通,並夾帶Patch,在E-mail寄來寄去的過程中,難以認定Patch的提交者,因此需要Signed-off-by來辨認patch作者。(也就是說,如果不走這個開發流程的話,其實signed-off-by並沒有必要)

P.S.使用 git commit -s ,在commit message中產生signed-off-by訊息

打包一大堆commit給別人 (Squash)

$ git rebase -i HEAD~[N] #沒有[]

會產生如下畫面

pick d94e78 Prepare the workbench for feature Z     --- older commit
pick 4e9baa Cool implementation 
pick afb581 Fix this and that  
pick 643d0e Code cleanup
pick 87871a I'm ready! 
pick 0c3317 Whoops, not yet... 
pick 871adf OK, feature Z is fully implemented      --- newer commit
[...]

將pick改成s,儲存

pick d94e78 Prepare the workbench for feature Z     --- older commit
s 4e9baa Cool implementation 
s afb581 Fix this and that  
s 643d0e Code cleanup
s 87871a I'm ready! 
s 0c3317 Whoops, not yet... 
s 871adf OK, feature Z is fully implemented      --- newer commit

[...]

整理commit message,再儲存,搞定

最後修改日期: 2019 年 7 月 22 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。