程序員必備技能之 多種場景下的Git操作


本文默認讀者使用過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],分享轉行菜鳥程序員成長過程彙總的煩惱和反思.
酷酷的coder

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章