移動提交記錄
git cherry-pick
自由修改提交樹
git cherry-pick
git cherry-pick <提交號>
如果你想將一些提交複製到當前所在的位置(HEAD
)下面的話, Cherry-pick 是最直接的方式了。我個人非常喜歡 cherry-pick
,因爲它特別簡單。
在master分支上,使用git cherry-pick C2 C4
就把side分支上的C2和C4分支複製過來了,非常優秀
交互式 rebase
git rebase -i HEAD~3
-i 代表 interact 交互,這樣會彈出一個交互界面
在目標分支輸入 git rebase -i HEAD~3
可以刪除提交,拖動修改順序
這裏主要記住git cherry-pick, 工作中常用
雜項
技術、技巧和小貼士集合
場景一
我正在解決某個特別棘手的 Bug,爲了便於調試而在代碼中添加了一些調試命令並向控制檯打印了一些信息。
這些調試和打印語句都在它們各自的提交記錄裏。最後我終於找到了造成這個 Bug 的根本原因,解決掉以後覺得沾沾自喜!
最後就差把
bugFix
分支裏的工作合併回master
分支了。你可以選擇通過 fast-forward 快速合併到master
分支上,但這樣的話master
分支就會包含我這些調試語句了。你肯定不想這樣,應該還有更好的方式……
實際上我們只需要讓Git複製解決問題的那個提交就可以了。 這裏我們可以使用cherry-pick 或者 rebase -i
git cherry-pick <hash值>
場景二
你之前在
newImage
分支上進行了一次提交,然後又基於它創建了caption
分支,然後又提交了一次。此時你想對的某個以前的提交記錄進行一些小小的調整。比如設計師想修改一下
newImage
中圖片的分辨率,儘管那個提交記錄並不是最新的了。
用git rebase 可以先將 提交2 和提交3進行更換,然後更改提交2(amend,附加提交),再進行交換提交2和提交3
場景三
分支很容易被人爲移動,並且當有新的提交時,它也會移動。分支很容易被改變,大部分分支還只是臨時的,並且還一直在變。
有沒有什麼永遠指向某個提交記錄的標識呢? git tag
除非刪除了某個提交,否則這個tag永遠就是標識這次提交
場景四
git describe :找出和你距離最近的tag
例子哈
對你有用的話,就點個贊吧!