本文默認讀者使用過git,並且知道簡單的git命令。本篇文章介紹git學習中的重點,以及利用git構建自己的workflow
Git學習的動力和重點
1 興趣驅動。很多朋友能在網上看到各種各樣git教程,但是這些文章僅僅是寫出git各種命令的操作。當看到這種文章時,我們往往只是找到需要的命令就直接離開,這導致每次使用git都需要google搜索。
2 工作驅動。由於工作驅動學習git,如果公司代碼全部託管在git倉庫,程序員由於要多次提交代碼,如果每次都要上網查詢git命令則會大大影響效率,而且也不夠“酷”。
我是由於工作驅動才認真學習git的操作,並在學習過程中結合工作中使用git的各種場景,制定了自己的workflow。
個人認爲git學習的重點爲以下兩點:
-
明確工作區,暫存區,暫存區分支的概念
-
分支指針的概念
常用的git命令
這是我工作中常用的Git命令,如果不知道每條命令的意思,請繼續耐心往下看。我認爲記憶git命令需要依託於各種使用場景,而不能簡單的依靠記憶,否則很容易遺忘。
-
git status
-
git add
-
git commit
-
git stash
-
git log
-
git log --graph
-
git reflog
-
git cherry-pick
-
git checkout -b
-
git checkout
-
git reset --hard
-
git reset HEAD
-
git merge
Git構建workflow
場景一:簡單提交
-
git add -A /*將工作區修改提交到暫存區 */
-
git commit -m “” /* 將暫存區修改提交到暫存區分支 */
-
git log --graph /* 強迫症的看一下commit記錄 */
-
git push origin master /* 將本地分支的提交,push到遠程master分支 */
場景二:開發新feature
-
git checkout -b /* 從本地master分支創建以feature命名的分支 */
-
[新feature開發中…]
-
git add -A /* 將新增代碼從工作區更新到暫存區 */
-
git commit -m “information” /* 將暫存區代碼提交到feature的本地分支 */
-
git log --graph /* 強迫症的查看以下commit的log */
-
git checkout master /* 切換到本地master分支 */
-
git merge /* 將feature分支的改動同步到本地master分支 */
-
git push origin master /* 將本地master分支的改動push到遠程master分支 */
場景三:解決bug
-
git checkout -b (從master分支創建以ticket id命名的分支)
-
[解決bug中…]
-
git add -A (將ticket分支修改的代碼更新到暫存區)
-
git commit -m “information” /* 將修改的代碼提交到ticket分支 */
-
git log --graph /* 強迫症的看下提交記錄 */
-
git checkout master /* 切換到master分支 */
-
git merge /* 將ticket分支的修改merge到master分支 */
-
git push origin master /* 將本地master分支的修改push到遠程aster分支 */
場景四:開發新feature的過程中,需要立刻解決bug
-
git checkout -b /* 爲某個feature創建新的分支 */
-
[新功能開發中…,突然來了一個優先級更高的bug需要解決]
-
git stash /* 保存feature分支工作區修改的代碼 */
-
git checkout master /* 切換到本地master分支 */
-
git checkout -b /* 根據ticket id創建修改bug的分支 */
-
[解決bug中…]
-
git add -A /* 將修復bug改動的代碼更新到暫存區 */
-
git commit -m “information” /* 將暫存區代碼提交到本地ticket分支 */
-
git checkout master /* 切換到master分支 */
-
git merge /* 將ticket分支的修改merge到master分支 */
-
git checkout /* 切換到最初的feature分支 */
-
git log --graph /* 強迫症的看一下commit的歷史記錄 ,記錄最新一次commit id的前6位*/
-
git stash pop /* 將feature分支工作區的修改還原 */
-
git cherry-pick /* 將master分支最新的提交同步到feature分支 */
場景五:正在修改代碼,忽然發現某個文件修改錯誤,需要撤回
- git checkout – /* 撤回工作區中某個文件的修改 */
場景六:修改的代碼更新到暫存區,需要撤回暫存區的修改
- git reset HEAD /* 將暫存區的修改撤回到工作區 */
場景七:修改的代碼已經commit到本地分支,需要撤銷修改
方法一:
- git reset --hard HEAD^ /* 返回到上次提交 */
方法二:
-
git log --graph /* 查看每次commit的ID number */
-
git reset --hard /* 返回到某次提交 */
場景八:修改的代碼已經push到遠程倉庫,需要重新提交修改
-
[在master分支修改代碼]
-
git add -A /* 將工作區代碼更新到暫存區 */
-
git commit -amend /* 在上次基礎上繼續提交 */
-
git push origin master /* 將修改push到遠程master分支 */
Note:這是一種偷懶的做法,理論上不應該在master分支修改代碼,但我目前還未找到好的替代方法。
場景九:同時開發多個feature
- git checkout -b /* 爲每個feature創建一個分支 */
場景十:在本地分支撤銷了上次提交,你又後悔了怎麼辦
- git reflog /* 該命令記錄每次使用的git命令 / git reset --hard /
返回上一次提交 */
總結
這篇文章主要介紹了在不同的開發場景中使用哪些git命令進行操作。我花了一上午的時間將GIT的操作學習了一遍,又花了一下午的時間根據工作中使用git的場景,構建了自己的workflow。如果你還未熟練使用git,這篇文章能在某種程度上爲你提供幫助。
如果你沒使用過git,那這篇文章對你來說無異於天書。我建議可以先去學習廖雪峯老師寫的git操作手冊。
ps: 歡迎關注我的公衆號[酷酷的coder],分享轉行菜鳥程序員成長過程彙總的煩惱和反思.