版本管理Git相關

前言

最近要開始正式進行融入團隊開發,對於 Git 的使用一直也不是特別清楚,基本的多人協作也比較模糊。所以照着廖雪峯老師的 Git 教程 系統的學習了一下,內容還是十分清晰有用的。這裏做一些簡單歸納,具體命令細節可以查看原文。

當然,大多數情況我們可能並不直接使用命令行操作 Git,之前用過一款圖形化工具 SourceTree 推薦給大家,當然現在 VsCodeIDEA 也都提供可視化操作,也十分方便。

I. 安裝Git

各個平臺的下載安裝應該較爲簡單,直接參考官網

安裝完git後,需要進行最後一步設置,在命令行輸入:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

# 查看是否設置成功
$ git config --list

因爲 git 是分佈式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。你也許會擔心,如果有人故意冒充別人怎麼辦?這個不必擔心,首先我們相信大家都是善良無知的羣衆,其次,真的有冒充的也是有辦法可查的。

注意 git config 命令的 --global 參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。

具體倉庫的設置可以進入具體倉庫的 .git 文件夾所在目錄下,命令行輸入:

$ git config user.name "Your Name"
$ git config user.email "[email protected]"

或者直接修改 .git/config 文件:

[user]
    name = Your Name
    email = [email protected]

II. 相關概念

  • 工作區:代碼項目所在根目錄下,除 .git 文件夾外
  • 版本庫/倉庫.git 文件夾就是倉庫(以前一直以爲倉庫是工作區+真正的倉庫,這是錯誤的)
    • 暫存區:stage,工作區的改動經過 add 後就可以加入暫存區
    • 分支:默認會創建出 master 分支

git-stage

III. 相關操作

創建提交

# 進入項目根目錄下,創建倉庫
$ git init

# 添加文件到倉庫命令:git add 文件相對路徑,如果是文件夾那麼遞歸add該文件夾下全部文件
# 例如在項目根目錄下創建了doc文件夾,文件夾下創建start.md文件,則:
$ git add doc/start.md

# 查看文件改動
git diff  # 所有文件改動
git diff 具體文件  # 詳細展示具體文件改動

# 查看add的文件 
$ git status

# 撤回add文件
$ git reset HEAD # 撤銷所有add內容 
$ git reset HEAD XXX/XXX/XXX.java # 對某個文件進行撤銷

# 將文件提交到倉庫命令:git commit -m "該次提交信息"
$ git commit -m "first commit"

# 查看歷史提交記錄
$ git log

版本回退

# 版本回退
$ git reset --hard HEAD^ # 上一個版本
$ git reset --hard HEAD^^ # 上上個版本
$ git reset --hard HEAD~10 # 上10個版本

# 回退完了再想回來(需要想退回來的那個版本的commitid)
# 命令格式: git reset --hard commitid前幾位即可
$ git reflog   # 記錄每一次命令操作,用於查找對應版本的commitid
$ git reset --hard 219c9

撤銷修改

# 當想要放棄工作區的某個文件的修改,命令:git checkout -- file
$ git checkout -- doc/start.md
# 上面命令意思是把start.md文件在工作區的修改全部撤銷,這裏有兩種情況:
# 一種是start.md自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
# 一種是start.md已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
# 總之,就是讓這個文件回到最近一次git commit或git add時的狀態。

# 當想要放棄暫存區的某個修改
$ git reset HEAD file # unstage操作
# 然後就回到上面的狀態了——放棄工作區的修改

刪除文件

# rm代表要從倉庫刪除某個文件,然後commit
$ git rm /doc/start.md
$ git commit -m "xxx"

本地與遠程倉庫

# 本地倉庫推送遠程
$ git remote add origin [email protected]:xxxx/xxxx.git  # 關聯遠程倉庫
$ git push -u origin master  # 推送本地倉庫master分支
# 由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。

# 遠程倉庫拉取本地
$ git clone 遠程倉庫地址

# 拉取遠程倉庫分支,命令:git checkout -b 分支 遠程分支
$ git checkout -b dev orgin/dev

# 拉取遠程倉庫分支最新提交
$ git pull

# 查看遠程倉庫信息
$ git remote
$ git remote -v

分支管理

# 從當前分支創建新分支並切換,命令:git checkout -b 分支
$ git checkout -b dev
# -b參數表示創建並切換,相當於 git branch dev 加上 git checkout dev

# 查看當前所在分支
$ git branch

# 在新分支上操作完,切回某一分支,命令:git checkout 分支名
$ git checkout master
# 切換回master會發現dev分支的操作沒有了

# 目標分支合併到當前分支,命令:git merge 目標分支
$ git merge dev  # 合併dev分支到當前master分支

# 刪除某一分支,命令:git branch -d 分支
$ git branch -d dev  # 合併完後的分支可以刪除
$ git branch -D dev  # 強制刪除

解決衝突

# 當需要合併的兩個分支有衝突時,原理就是再繼續修改,時間線向前推進焦點
$ git merge feature1   # 當合並feature1到master,出現衝突
# 改完衝突,便可以add/commit了
$ git add doc/start.md
$ git commit -m "conflict fixed"

# 查看分支合併圖
$ git log --graph

# 合併分支禁用Fast forward模式,Fast forward模式合併後刪除分支會丟失分支信息,
# 看起來就是一條線,沒有合併相交
# 命令:git merge --no-ff -m "comment" 分支
$ git merge --no-ff -m "your merge comment" dev

保存現場

# 場景示例:https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
# 可以利用stash保存工作區現場,暫時清空工作區,最後進行恢復
$ git stash

# 恢復現場
$ git stash apply  # 恢復後,stash內容並不刪除,需要用git stash drop來刪除
$ git stash pop    # 恢復的同時把stash內容也刪了

# 查看所有的stash
$ git stash list

標籤管理

# git tag <name>就可以打一個新標籤
$ git tag v1.0  # 對當前最新commitid打標籤
$ git tag -a v1.0 -m "tag comment"  # 當前標籤的comment
$ git tag v0.9 f52c633  # 對指定的commitid進行打標籤

# 查看所有標籤
$ git tag

# 查看某一標籤信息
$ git show v0.9

# 刪除本地某一標籤
$ git tag -d tagname

# 推送本地標籤到遠程
$ git push origin tagname
$ git push origin --tags  # 一次性推送全部尚未推送到遠程的本地標籤

# 刪除遠程標籤
$ git tag -d tagname  # 先刪除本地
$ git push origin :refs/tags/tagname  # 再刪除遠程倉庫

IV. IDEA可視化操作

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