Git 梳理

之前一直都是自己一個人操作 Git,會的也就是那幾個命令。馬上要去實習了,所以打算將 Git 重新學習并且復盤下,尤其是分支那塊的知識
鏈接:
https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup
https://medium.com/@steveamaza/how-to-write-a-proper-git-commit-message-e028865e5791
https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
https://juejin.cn/post/6844903890295455751

使用前配置

簽名的作用是區(qū)分不同操作者身份。用戶的簽名信息在每一個版本的提交信息中能夠看到,以此確認本次提交是誰做的。Git 首次安裝必須設置一下用戶簽名,否則無法提交代碼。這里設置用戶簽名和將來登錄 GitHub(或其他代碼托管中心)的賬號沒有任何關系。 全局配置一般在 ~/.gitconfig 中 git config --global,針對特定項目,一般在 .git/config 文件中 git config --local

  • git config --global user.name 提交人姓名
  • git config --global user.email 提交人郵箱
  • 查看 git 配置信息:git config --list

撤銷

  • 文件修改只存在工作區(qū),還沒有被添加到暫存區(qū):git checkout <file> 或者 git restore <file>
  • 文件修改已被添加到暫存區(qū),若想從暫存區(qū)回到工作區(qū)的狀態(tài):git reset HEAD <file> 或者 git restore --staged <file>, 之后若想繼續(xù)撤銷工作區(qū)的修改,執(zhí)行 git checkout <file> 或者 git restore <file> 即可
  • 將文件從暫存區(qū)刪除:git rm --cached 文件 要注意這邊雖然從暫存區(qū)中刪除了,但是工作目錄中還是存在的

版本

HEAD 指針指向哪個版本,當前文件就處于這個版本的狀態(tài)

  • git reflog 查看版本信息
  • git log 查看版本詳細信息

版本穿梭(回滾)

Git 切換版本,底層其實是移動的 HEAD 指針。假設有 v1,v2,v3三次commit記錄,想從當前的v3回滾到v2,則使用git reset --hard v2版本號。注意回滾之后,如果使用git log 查看的話,v3版本記錄是看不見得,如果想從v2再變?yōu)関3,可以使用git reflog查看到v3的版本號,再使用git reset --hard v3版本號

  • git reset --hard 版本號
  • git reset --hard HEAD^ 回退一次
  • git reset --hard HEAD^^ 回退兩次

回滾至之前版本

git log
git reset --hard 版本號

回滾至之后版本

git reflog
git reset --hard 版本號

遠程倉庫

  • 查看遠程分支:git branch -a
  • 查看當前本地倉庫對應的遠程倉庫:git remote show 一般會顯示 origin
  • 查看當前本地倉庫對應的遠程倉庫的詳細信息:git remote show origin
  • 若在遠程新建分支之后,本地在沒有 git fetch 的情況下,直接 git checkout 分支名 是會報錯沒有被跟蹤的,一般情況下,在遠程新建分之后,本地想要拉取,需要執(zhí)行 git fetch 后 再執(zhí)行 git checkout -b 分支名 origin/分支名
  • 若是在直接新clone的倉庫下切換遠程存在分支,那么不需要 git fetch , 因為此刻,本地倉庫與遠程是同步的,git fetch 一般用于 mentor 在遠程庫中新建分支,因為此刻你本地代碼肯定是老早clone好的
  • 在本地新建分支后,若想推送到遠程,第一次push的時候不要直接git push origin 分支名,這樣貌似不會直接與遠程該分支建立連接,需要使用 git push --set-upstream origin 分支名 ,在 vscode 中 直接選中 push 不要選擇push to

git stash

在切換分支之前,必須要將當前分支上所有的改動進行提交才能夠切換分支,但更多時候是當前分支上還沒有開發(fā)好,不想commit,但不得不切換到其他分支上改 bug。在 git 中,可以暫時提取分支上所有的改動并存儲,讓開發(fā)人員得到一個干凈的工作副本,臨時轉向其他工作。

  • 存儲臨時改動:git stash
  • 恢復改動:git stash pop 該命令會將 stash 版本刪除掉, git stash apply 會保存

差異對比

  • git diff 比較暫存區(qū)與工作區(qū)
  • git diff --cached 比較版本區(qū)與暫存區(qū)

沖突

沖突產生的原因:合并分支時,兩個分支在同一個文件的同一個位置有兩套完全不同的修改,Git 無法替我們決定使用哪一個,必須人為決定新代碼內容。合并分支只會修改合并的分支,也就是 master 分支,不會修改 dev 分支上的內容

  1. <<<<<<< HEAD======= 之間是當前master分支的代碼,=======>>>>>>> dev 之間是 dev 分支的代碼
<<<<<<< HEAD
hello git! master test
hello git!
=======
hello git!
hello git! dev test 
>>>>>>> dev
  1. 產生沖突后,需要人為手動修改沖突,將自己需要的代碼保存下來,如下
hello git! master test
hello git! dev test 
  1. 手動解決沖突后,還需要將文件添加到暫存區(qū)并且提交到本地庫,走 add commit 的流程

git rebase

注意事項

  • 不要對master分支執(zhí)行rebase,會引起很多問題
  • 一般來說,執(zhí)行rebase的分支都是自己的本地分支,沒有推送到遠程版本庫
  • 不要在與別人共享的分支上執(zhí)行 rebase 操作,rebase操作都是在本地與別人沒有共享的分支上執(zhí)行的
  • rebase 合并的時候不要把已經提交到遠程庫的記錄合并,要合并那些沒有提交到遠程庫的記錄
  • 在 rebase 之后 再進行 merge 命令 就相當于是 fast-forword 操作了

應用場景

將多個記錄合并為一個記錄
git rebase -i HEAD~3 從當前 HEAD 指針所指位置找最近的3條記錄進行合并
將分叉記錄歸并為一條

  • 使用merge的時候,是切換到master分支上,執(zhí)行git merge dev,但是使用rebase的時候,如果想將dev上的提交到master上,要先切回到dev分支,執(zhí)行git rebase master,之后再切回master分支,執(zhí)行git merge dev
    拉取遠程產生分叉
    git pull origin dev 變成 git fetch origin dev; get rebase origin/dev
  • checkout到test分支上之后執(zhí)行git rebase dev,是以dev為基準,將test分支上的提交合并到dev分支上

零散知識點

  • push 和 pull 的時候都需要指定分支,沒有指定的情況是 該分支 已經默認與遠程分支進行關聯(lián)了
  • 第一次 git clone 只會顯示 master 分支上的內容,其他分支其實也被克隆下來了,只是沒有顯示。如果想獲取到其他分支,可以先用 git branch -a 查看遠程所有分支,然后用 git checkout 分支名 就可以獲取到相應的分支 ,遠程倉庫若有這個分支會自動追蹤
  • 修改最新commit的message:git commit --amend
  • git cherry-pick 一般應用于本地分支上

規(guī)范

  • git commit -m "Git commit message here":commit message 首字母要大寫,限制 50 個單詞之內,不要用句號結束,獨占一行,如需要進一步解釋,則用空行分開摘要和正文,正文每行不超過 72 個單詞,主要解釋這次 commit 解決什么問題,說明代碼變動的動機,以及與以前行為的對比,使用祈使語句,即現(xiàn)在時。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Git 關鍵知識點 一、輸入用戶名和密碼 Git 安裝完成后,選擇要放置項目文件夾的目錄,空白處右鍵選擇 Git ...
    Gavininn閱讀 272評論 0 0
  • 在工作中接觸git已經快一年半了,真的是一款強大便捷的版本管理工具。常用的一些命令已經很熟,偶爾用到不常用的功能就...
    foreverie閱讀 195評論 0 0
  • 一、 1、git status查看文件提交狀態(tài) 該分支本地代碼未提交commit 如果新增文件 如果已經提交了 但...
    平凡人筆記閱讀 202評論 0 1
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉變要...
    余生動聽閱讀 10,842評論 0 11
  • 彩排完,天已黑
    劉凱書法閱讀 4,473評論 1 3

友情鏈接更多精彩內容