garylai1990/Goody-Bakery — pull request #12 by garylai1990 (2013-09-18 15:28:25+00:00)
Title: Update readme.md

@tancc 這邊給你看一下我整理過後的 commit

首先滿重要的事情是，不管是什麼時候， **絕對不要在 master 修改程式碼**

因為這樣的話，像是你剛剛修改的所有東西， develop 上面都會沒有，這樣專案的程式碼就會分岔，造成不同版本間的歧異！

我會希望你先用 publish 把這些事情先摸熟
- pull request
- commit style
- rebase

那我這邊把我剛剛怎麼整理 commit 的流程整理出來，然後順便把以後遇到這樣的情況時，該怎麼處理都教你

- 剛才有非常多 commit message 一樣的修改，裡面的修改大致上都一樣，不過你已經 commit 下去時，該怎麼辦呢？

這個時候我會先用
```
git reset --soft HEAD^
````
不過我們用的 command line 是 zsh ，所以要用
```
git reset --soft HEAD\^
```
這個指令就是，取消最後一筆 commit ，但是要把修改的部分保留，並且還保留在 stage 的狀態，如果沒有加上 soft 就會把 commit 取消，甚至連檔案都不在 stage 的狀態

每下一次就是回復一筆，如果要一次回復多筆，那就可以多加 `^` or `\^` (zsh) ，但我會建議一筆一筆下，在這裡我回復到保留著第一筆 commit 的地方

然後這個時候，你可以使用 ` git commit --amend ` 這個指令就是，把目前所有在 stage 的檔案，直接併入到最後一筆 commit ，這個時候就會整理好所有的 commit 在同一筆了！

接著，因為你的檔案都在 master 我認為他應該要放在 develop ，再送 pull request 或是從 develop merge 到 master 比較好

所以這個時候我會打開 terminal checkout 到 master 的 branch 下 tig ，show 出目前有的 commit ，然後打開一個新的 terminal tab ，checkout 到 develop 這個 branch ，開始使用 ` git cherry-pick `

例如：你有當時有兩筆 commit 的編號分別是
```
293f04afab7dd4dda15ef7438e5eaf7cfdd01789
8132db80b169906e53bb850e9baf876d6311c160
```

我就會在 develop 下
```
git cherry-pick 293f04afab7dd4dda15ef7438e5eaf7cfdd01789
git cherry-pick 8132db80b169906e53bb850e9baf876d6311c160
```
這樣就會把兩個 commit 從 master 拉到 develop 上面這樣就解決了程式碼的修改應該在 master 以外的問題

最後的步驟就要非常小心

因為我確定把 master 整理完了，所以我是使用
```
git push -f origin master
```
強制把遠端的 code 用我 local 端的複寫，這是非常危險的事情，但因為上面的 commit message 要修改，所以我只好開大決

最後，我把 develop push 上去，重新送 pull request ，這樣一來就可以把所有的東西都整理乾淨啦！

因此這個時候，你可能就要重新在 local 端的 develop 跟 master 的 branch 重新 pull 然後保持一下程式碼的更新~~