面向任务的 Git 学习法
前言
對于 Git 學習而言,通??菰锏睦碚搶W習并不能幫助我們快速掌握它的使用,需要我們結合實踐,才能更好地學會利用 Git 進行多人協作開發。本文就以任務的形式,來介紹 Git 命令的使用,希望在進行學習前,你已經有了些許理論基礎。
這里安利一個可以輔助 git 學習的網站:Learn Git Branching
文章目錄
- 前言
- Task 1:局部設置用戶名和郵箱
- Task 2:提交遠端的流程
- Task 3:提交后的回退操作
- Task 4:拉新分支進行開發
- Task 5:提交項目的部分相似文件
- Task 6:利用 git merge 進行分支合并
- Task 7:刪除本地和遠程分支
- Task 8:刪除項目中的 Untracked files
- Task 9:利用 git rebase 進行分支合并
- Task 10:給項目打版本標簽
Task 1:局部設置用戶名和郵箱
描述:我們通常會按照下面命令進行 git 的用戶名和郵箱的配置。
# 全局配置用戶名:TestName git config --global user.name TestName# 全局配置郵箱:email@example.com git config --global user.email email@example.com但是有時候,我們需要用工作的郵箱維護公司的項目(全局配置),然后用自己的 GitHub 注冊郵箱維護自己的開源項目(局部配置),我們就需要局部設置自己項目倉庫使用的用戶和郵箱了。
# 局部設置用戶名:VeggieOrz git config user.name VeggieOrz# 局部設置郵箱:lwh_233@163.com git config user.email lwh_233@163.com# 查看倉庫當前使用的用戶名 git config user.name # 查看倉庫當前使用的郵箱 git config user.emailTask 2:提交遠端的流程
描述:目前你已經在本地完成了某個功能的開發,你需要把你寫的代碼提交到遠端。
注意點:在將本地修改提交到遠程之前,一定要確保本地的代碼是最新的。
# 存儲“工作區和暫存區”的修改 git stash# 拉下最新代碼 git pull# 取出“工作區和暫存區”的修改 git stash pop# 本地正常提交流程 git add . git commit -m 'some information'# 提交代碼到遠端 git pushTask 3:提交后的回退操作
描述1:你不小心將錯誤的代碼提交到本地的暫存區或者倉庫了,你希望可以回退你的提交的代碼(代碼依舊保留)。
# 將提交到本地倉庫的代碼回退到暫存區 git reset --soft commitID# 從暫存區回退到工作區 git reset Headgit reset Head file_name描述2:你的某個提交(commitID: 80fbaf0e21)已經 push 到遠端了,但是你需要撤銷掉該提交中的所有內容。
這個時候就可以用上我們的 git revert 命令
# 將最新提交內容反向修改回去,并形成新的commit git revert HEAD # 將指定 commitID 的提交內容反向修改回去,并形成新的commit git revert commitID執行完成后,我們發現該次提交的內容已經成功回退,用 git log 還可以看到如下的 revert 操作記錄,即 revert 操作是會生成一條單獨的 commit 記錄。
commit 13632e9378cc2dcc404389474f0cef741c868391 (HEAD -> master) Author: VeggieOrz <VeggieOrz@163.com> Date: Wed Nov 25 01:37:29 2020 +0800Revert "Revert "update file again""This reverts commit 80fbaf0e218a48bc665f1e5d11b8ba399ecacf51.描述3:你執行了某些神奇的操作后,發現場面漸漸失去控制,想讓代碼變回之前還沒有操作過的樣子。
這個時候,我們可以執行如下操作:
注意:執行完 git reset --hard 后,(commitID, now_commitID] 直接的記錄在 git log 中將會找不到了!
Task 4:拉新分支進行開發
描述:新的需求來了,你需要在主分支的基礎上拉一個名為 new_dev 的新分支進行新需求的開發。
注意點:一定要記得和遠程建立關聯,否則創建的分支只在本地有,后續就會遇到很多麻煩。
# 創建并切換到名為 new_dev 的分支 git checkout -b new_dev # 上面命令等同于下面兩條命令 git branch new_dev git switch new_dev# 將分支推送到遠端 git push --set-upstream origin new_dev# 查看遠端分支和本地分支的關聯 git branch -vvTask 5:提交項目的部分相似文件
例如,我們通過 git status 命令看到如下反饋:
On branch dev Your branch is up to date with 'origin/dev'.Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: Resources/a.jsonmodified: Resources/b.jsonmodified: Resources/c.jsonmodified: Resources/d.jsonmodified: algorithm.cpp no changes added to commit (use "git add" and/or "git commit -a")現在,我們希望只提交那部分 json 文件的改動,可以嘗試下面命令
# 利用 * 通配符進行匹配,其他提交流程照舊 git add Resources/*Task 6:利用 git merge 進行分支合并
描述:你現在剛在 new_dev 分支上完成新需求的開發,現在你需要將 new_dev 分支的內容合并到 release 發布分支中。
注意點:需要保證本地兩個分支(new_dev 和 release)的代碼都是最新的。
# 保證 new_dev 分支的代碼是最新的 git pull# 切換到 release 分支 git switch release# 保證 release 分支的代碼是最新的 git pull# 將本地的 new_dev 分支合并到 release 分支中 git merge new_dev# 提交本地的合并記錄 git pushTask 7:刪除本地和遠程分支
描述1:現在你已經完成了一系列需求的開發,并且改動都已經合并到了 develop 分支,你發現本地存在很多以后根本不會用到的分支。為了方便分支管理,你需要將這些無用的分支刪除,下面以刪除 new_dev 分支為例。
注意點:在進行刪除之前,需要確保分支中的內容已經合并到主分支了,而且以后不再需要該分支。
# 查看本地和遠程的所有分支 git branch -a # 如果遠程分支太多,可以用 git branch -vv# 刪除遠端分支 git push origin --delete new_dev# 刪除本地分支 git branch -d new_dev # 如果提示刪除失敗則用 git branch -D new_dev描述2:經過相當長一段時間的開發,你發現本地已經堆積了大量的分支,這增加了你查找分支的成本,你希望清空本地所有無用的分支。(不刪除遠程分支,遠程分支由 QA 管理)
# 刪除當前分支以外的所有分支 git branch | xargs git branch -d# 刪除分支名滿足匹配結果的分支 git branch | grep 'dev*' | xargs git branch -dtip:管道 ‘|’ 是實現「將前面的標準輸出作為后面的標準輸入」;xargs是實現「將標準輸入作為命令的參數」。
Task 8:刪除項目中的 Untracked files
描述: 進行 Merge 操作的回退之后(git reset HEAD和git checkout .),用git status命令發現工程目錄下還存在著很多 Untracked files(如下文所示),我們需要將他它們刪除。
On branch new_dev Your branch is up to date with 'origin/new_dev'.Untracked files:(use "git add <file>..." to include in what will be committed).gitlab/Resources/icon.pngimage_resources.pynothing added to commit but untracked files present (use "git add" to track)使用命令如下:
# 刪除所有的 Untracked files git clean -f # 刪除所有的 Untracked file 和 Untracked directory(目錄) git clean -fd注意點: 由于刪除了之后沒有辦法再復原,我們需要謹慎一點,先用以下命令確認要刪除的文件不再需要才進行刪除。
# 查看將要刪除文件或者目錄 git clean -nf git clean -nfdTask 9:利用 git rebase 進行分支合并
描述: 你正在 new_dev 分支上進行新需求的開發,dev 分支上剛合入了新版本的代碼,你需要將 dev 分支的代碼合入到你的分支中。
由于 git merge 操作會讓 git 提交記錄變得不美觀(時間線上有過多的分叉),這里需要用 git rebase 進行操作。
首先,我們需要切換到 dev,然后拉取最新代碼,rebase 之前需要保證本地該分支代碼為最新版本。
git switch dev git pull為了減少解決沖突的次數,我們還需要壓縮提交。先找到拉分支時,原來分支最新的commitID,然后利用git rebase -i進行開發分支的提交壓縮。
git switch new_dev# 找到拉分支時,原來分支最新的commitID git log# 壓縮(commitID, HEAD] 成一個 commit git rebase -i commitID這里介紹一個 vim 的字符串替換命令,輔助我們將 pick 修改為 s。通常我們執行2,ns/pick/s/,其中 n 為最后一次提交所在的行數。
# 替換第 m 行到第 n 行中每一行的第一個 str1 為 str2 m,ns/str1/str2/最后,我可以進行合并的 rebase 操作了。完成合并和沖突的解決后,需要將加-f參數,將代碼強推到遠端。
git rebase dev# rebase 會影響時間線,所以需要強推 git push -fTask 10:給項目打版本標簽
描述1: 我們在完成一個版本的開發的時候,需要給代碼打上版本標簽?,F在,我們剛完成 0.1.0 版本代碼的開發,需要完成打標簽的操作。
# 在本地打標簽 git tag '0.1.0'# 將標簽推送到遠端 git push --tags描述2: 再精巧的工匠也有操作失誤的時候,在打了標簽之后,我們發現還有部分該版本的代碼沒有提交?,F在,我們需要刪除本地和遠端的剛打下的 0.1.0 標簽,以方便后續提交了代碼再重新打標簽。
# 刪除本地的 0.1.0 標簽 git tag -d '0.1.0'# 查看標簽 git tag# 刪除遠端的 0.1.0 標簽 git push origin :'0.1.0'持續更新中……
總結
以上是生活随笔為你收集整理的面向任务的 Git 学习法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: macOS 上的 Charles 配置看
- 下一篇: springboot接口签名统一效验_P