原文地址 http://www.jianshu.com/p/8d666830e826git
【本身總結】vim
0, git diff併發
git diff a b 是以a爲基準,把b和a的區別展現出來,即放在前面的是基準。spa
1, git commit --amend 更改最近一次提交的內容日誌
此命令能夠把當前改動追加到上一次提交中code
用法:blog
注:log中的日誌id會改變。ip
2, 更改某個指定commit開發
①,git rebase <指定commit的父commit> --interactive get
②,將須要改動的commit前面的pick 改成 edit,而後保存退出。
③,更改文件
④,git add <更改的文件>
⑤,git commit --amend
⑥,git rebase --continue
這裏若是有衝突, 須要先解決衝突:
git add .
git commit --amend
解決衝突以後再執行git rebase --continue
3, 將當前更改追加到某個commit上(同2只有細微區別)
①,git stash 保存工做空間的改動
②,git rebase <指定commit的父commit> --interactive
③,將須要改動的commit前面的pick 改成 edit,而後保存退出
④,git stash pop
以後的步驟和2同樣
⑤,git add <更改的文件>
⑥,git commit --amend
⑦,git rebase --continue
這裏若是有衝突, 須要先解決衝突:
git add .
git commit --amend
git rebase --continue
原文轉載以下:
問題: 因爲項目的版本線混亂, 致使可能須要在不一樣分支上切換, 並且某些功能也可能在不一樣分支上移動.
一個版本可能有多個功能點, 一個版本又對應於一個分支, 若是一個功能點有多個提交, 那麼當其餘分支須要這個功能點時怎麼辦? cherry-pick或patch均可以實現, 可是都各有麻煩的地方: cherry-pick須要找出要移動的功能點相關的提交記錄, 而patch須要功能點的提交記錄都是連續的. 實際開發中不一樣功能點之間的提交記錄每每是穿插的. 若是某個功能點相關的改動只生成一個commit,這將極大的簡化功能點在分支間的移動工做. 那麼是否能夠實現改動某次提交
和將現有改動追加到某次提交上
呢?
下面是cherry將某個功能點從一個分支移動到其餘分支的示意圖:
如上圖, 可使用cherry-pick將某個功能點從branchA移動到branchB上, 步驟以下:
git cherry-pick 0096b95 7bfbaaa 326d7d8
那麼問題來了, 若是某個功能點提交了不少次且log信息不規範, 那咱們找commit-hash的時候就得費一番功夫了, 可不能夠將後來的改動追加到之前的某個commit上呢? 或者直接更改改之前的某次提交?
答案是: 能夠! (git中將當前改動追加到上一次提交上可使用命令git commit --amend
實現, 下面介紹的兩種解決方案都使用了這樣命令)
<一> 下面是直接更改某次提交的操做步驟:
git rebase f744c32cf74454a74bb2f80e5e38b120cb475af1^ --interactive
esc
, 輸入:wq
退出git add 改動的文件
添加改動文件到暫存git commit --amend
追加改動到第一步中指定的commit上使用git rebase --continue
移動HEAD到最新的commit處
這裏會有衝突, 須要解決:
git add .
git commit --amend
解決衝突以後再執行git rebase --continue
上述方法, 是改動某個指定的commit, 若是我要將工做空間中已經改動的東西追加到某個commit上, 那麼改如何作呢?
<二>將工做空間中的改動追加到某次提交上的步驟以下:
git stash
更改文件
改爲執行命令git stash pop
, 其餘步驟都同樣
這樣處理以後, 若是branchB分支須要branchA分支上的某個功能, 只須要找到這個功能的唯一的一個提交記錄便可, 就不須要在不少commit之中尋找這個功能點的相關提交記錄. 更改合併以後再移動功能點, 就簡單了許多, 執行找到功能點的唯一一個提交記錄, 讓後使用git cherry-pick commit-hash
便可, 操做示意圖以下:
總結: 上述更改摸個提交記錄
/將現有改動追加到某個commit之上
的方案在實際開發環境中的需求並很少, 並且實現起來有至關的侷限性, 緣由以下:
多個版本的開發併發進行
(產品你TMD當咱們是電腦麼, 有多個cpu同時運行啊?! 很差意思, 忍不住爆粗口了-_-!)