git實(shí)戰(zhàn)技巧

git實(shí)戰(zhàn)技巧大綱

基本概念

git的三個分區(qū)

  • 工作區(qū)(working directory)
  • 暫存區(qū)(stage/index area)
  • 提交歷史(commit history)
三個分區(qū)的關(guān)系

git 本地倉庫與遠(yuǎn)程倉庫

  • 本地倉庫(repository)
  • 遠(yuǎn)程倉庫(remote)
  • 本地倉庫與遠(yuǎn)程倉庫機(jī)制是git 分布式特性的體現(xiàn)
  • 一個本地倉庫可以對應(yīng)多個遠(yuǎn)程倉庫
  • 本地倉庫和遠(yuǎn)程倉庫 可以通過 clone | push | pull | fetch 等方式交互
兩個倉庫的交互

git操作(指令)

日常操作

  • git add: 將文件加入暫存區(qū)

    • add -u 將已加入暫存區(qū)的文件更新。
    • add . 將文件的新建、更新,添加到暫存區(qū)。
    • add -A 將文件的新建、更新、刪除,添加到暫存區(qū)。
  • git rm:將文件從暫存區(qū)和工作區(qū)中刪除

  • git diff:查看差異

    • diff --cached 暫存區(qū)和HEAD的差異
    • diff -- [文件名] 具體文件的差異
    • diff 分支名 分支名 -- [文件名] 查看兩個分支直接的差異(輸入文件名則只看該文件)
  • git checkout -- [文件名]: 從暫存區(qū)復(fù)制對應(yīng)文件到工作區(qū),會覆蓋工作區(qū)內(nèi)容

  • git reset: 版本穿梭

    • reset --soft [commit_id] 將暫存區(qū)與工作區(qū)都回撤到 [commit_id]的版本(差異恢復(fù)到暫存區(qū))
    • reset --hard [commit_id] 將暫存區(qū)與工作區(qū)都回撤到 [commit_id]的版本(差異直接拋棄掉)
    • 可以配合 git reflog 來回穿梭
  • git stash: 臨時存儲

    • stash [save message]: 將當(dāng)前工作區(qū)和暫存區(qū)的內(nèi)容進(jìn)行存儲(未跟蹤文件不會進(jìn)行存儲)
    • stash -u 將當(dāng)前工作區(qū)和暫存區(qū)的內(nèi)容進(jìn)行存儲(未跟蹤文件也會進(jìn)行存儲)
    • stash list 查看存儲列表
    • stash pop [stash_id] 彈出單個存儲(被彈出的存儲從list中消失)
    • stash apply [stash_id] 應(yīng)用單個存儲(被應(yīng)用的存儲不會從list中消失)
    • stash drop [stash_id] 刪除單個存儲
    • stash clear 刪除所有存儲
  • 分支相關(guān)操作

    • git branch 查看本地分支
    • git branch -r 查看遠(yuǎn)程分支
    • git branch -a 查看所有分支
    • git branch -d [branch_name] 刪除分支
    • git branch [branch_name] 新建分支(不會自動切換到新建分支)
    • git checkout -b 切換分支(自動切換到新建分支)
    • git merge [branch_name] 將[branch_name]與當(dāng)前分支合并

rebase(變基)

  • rebase 總結(jié)來說就是用于整理分支

  • rebase 常用功能如下

    • 修改commit message
    • 合并commit
    • 舍棄commit(慎用)
    • 整理多分支開發(fā)時導(dǎo)致的commit tree分叉
  • rebase -i 中的操作

    • pick:保留該commit(縮寫:p)
    • reword:保留該commit,但我需要修改該commit的注釋(縮寫:r)
    • edit:保留該commit, 但我要停下來修改該提交(不僅僅修改注釋)(縮寫:e)
    • squash:將該commit和前一個commit合并(縮寫:s)
    • fixup:將該commit和前一個commit合并,但我不要保留該提交的注釋信息(縮寫:f)
    • exec:執(zhí)行shell命令(縮寫:x)
    • drop:我要丟棄該commit(縮寫:d)
  • 修改commit message 的流程

    • git rebase -i [commit_id]
    • 進(jìn)入vi界面后將需要修改commit message 的commit 的操作符改為reword
    • 進(jìn)入到修改界面
  • 合并commit 的流程

    • git rebase -i [commit_id]
    • 進(jìn)入vi界面后將需要合并的commit 的操作符改為squash 或者 fixup
  • 舍棄commit 的流程

    • git rebase -i [commit_id]
    • 進(jìn)入vi界面后將需要舍棄 的操作符改為drop
    • 如果舍棄的commit引起沖突,先修改沖突,然后git rebase --continue
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容