git全局配置和單個倉庫配置郵箱和用戶名
本地ssh-key的創建
git從遠程庫同步到本地倉庫
1. 遠程倉庫發生改變,本地倉庫沒有改變
2. 遠程倉庫沒有改變,本地倉庫發生改變(將本地更新到遠程)
版本回退 : git reset
1. 基本而用法
2. --hard參數
推送和拉取
1. git push: 推送本地分支到遠程
2. git pull: 拉取遠程分支到本地並合並
分支管理
1. git branch: 分支操作
2. git checkout: 分支間切換
3. git merge: 合並分支
其他命令
1. git revert: 撤銷某次提交
2. git tag: 標簽的操作
3. git show: 顯示信息
4. git blame: 查看文件每行的提交歷史 (追責)
GIT團隊協作
1. 分支設置
2. 普通開發人員的操作
3. 團隊 leader 的操作
[========]
常用命令
git init //倉庫初始化
git clone git@github.com/xxxx.git //克隆遠程倉庫到本地
git remote add origin git@github.com/xxxx.git // 連接到遠程倉庫
git status // 查看版本庫的狀態
git add .|[file you want add like README.md] // 添加修改的文件進入版本庫
git commit -m "the content of your modify" // 提交版本庫
git push -u origin master // 上傳到遠程版本庫</pre>
git全局配置和單個倉庫配置郵箱和用戶名
全局配置
git config --global user.name "github's Name"
git config --global user.email "github@xx.com"
git config --list
單個倉庫配置
git config user.name "github's Name"
git config user.email "github@xx.com"
git config --list
git config --list查看當前配置, 在當前項目下面查看的配置是全局配置+當前項目的配置, 使用的時候會優先使用當前項目的配置
本地ssh-key的創建
ssh-keygen -t -rsa -C "dalinyy@163.com"
然后在C:\Users\Administrator.ssh(windows)目錄中可以看到生成的ssh-key。
git從遠程庫同步到本地倉庫
1. 遠程倉庫發生改變,本地倉庫沒有改變
1.查看遠程倉庫 : git remote -v
2.把遠程倉庫更新到本地 : git fetch origin master
3.比較遠程和本地版本的差異 : git log master.. origin/master
4.合並遠程倉庫 : git merge origin/master
2. 遠程倉庫沒有改變,本地倉庫發生改變(將本地更新到遠程)
- 常看更改 : git status
- git add .
- git commit -m "content"
- git push -u origin master
版本回退 : git reset
1. 基本而用法
'''
1. git log //查看歷史版本
2. git log --graph //一圖形界面方式查看歷史
3. git reset HEAD~n //回退到前 n 版本, n = 前幾個版本
4. git reset id //回退到任意一個id版本
'''
2. --hard參數
添加--hard參數: 表示回退到某個版本並且丟棄調工作區進行的修改
git reset --hard HEAD~1 或者 git reset --hard id
不添加--hard參數:不加該參數表示回退到某個版本但保留工作區的修改。
git reset HEAD~1 或者 git reset id
推送和拉取
1. git push
: 推送本地分支到遠程
當修改完成,本地的改動都已經提交到本地庫,則可以將本地分支推送到遠程代碼庫了。
git push origin master origin //表示遠程代碼庫的一個別名(也可以修改為其他名字,可
git remote //master 表示需要推送的分支名稱。
如果,push 的過程中提示當前分支進度落后於遠程的分支,則需要通過 git pull 命令來拉取遠程最新狀態和本地分支進行合並,完成之后再 push 到遠程就可以了。
2. git pull
: 拉取遠程分支到本地並合並
一般是本地分支的進度落后於遠程分支時,需要使用該命令。
git pull origin master origin //表示遠程代碼庫的一個別名(也可以修改為其他名字,可
git remote //master 表示需要拉取合並的分支名稱。
常用
git pull --rebase origin master
用 rebase 的方式進行,不會產生 merge 保持分支干凈、整潔
分支管理
1. git branch
: 分支操作
git branch //顯示本地所有分支以及當前所在哪個分支
git branch branchName //用於新建名為 branchName 的新分支
git branch -d branchName //用於刪除名為 branchName 的分支
git branch -D branchName //用於強制刪除分支
2. git checkout
: 分支間切換
該命令除了進行分支間切換功能外,還可以用來丟棄工作區中的修改內容,這里就不作介紹了,僅介紹分之間的切換功能
git checkout branchName //用於從當前分支切換到名為 branchName 的分支上。
git checkout -b branchName //用於新建名為 branchName 的分支並切換到該分支上。
注意與 git branch 新建分支的區別,此處除了新建分支外還進行了切換操作
3. git merge
: 合並分支
該命令用於合並兩個分支。 命令:git merge branchName
用於將名為 branchName 的分支合並到當前分支。 有兩種合並方式:
- fast-forward 方式合並: 命令:
git merge dev
- 非fast-forward 方式合並: 命令:
git merge dev
注意兩種方式的區別:fast-forward 方式僅僅是移動了 HEAD 指針,而非 fast-forward 方式則是新建了一個節點
其他命令
1. git revert
: 撤銷某次提交
該命令用於撤銷歷史上的某次提交,注意該撤銷操會作為一個新節點存在於分支上
2. git tag
: 標簽的操作
用於給某次提交打個標簽,例如截止到某次提交后完成了某個重大版本的開發,則可以在該次提交打上一個版本的 tag
git tag V1.0 標注V1.0版本
3. git show
: 顯示信息
可用於顯示某次提交或者某個 tag 相關的信息。 命令: git show commit_id 顯示某次提交的詳細信息
命令: git show tag_name 顯示某個 tag 的詳細信息
4. git blame
: 查看文件每行的提交歷史 (追責)
git blame file_name
可用於查看某個文件中的每一行是那次提交產生的,是誰提交的,什么時候提交的,提交的版本號是多少等等詳細信息,在實際工作中方便對出問題的代碼進行追責,找到產生 BUG 的責任人。
GIT團隊協作
在團隊協作過程中一般會有多個分支,比如有默認的 master 分支,有用於開發的 dev 分支,還有用於測試的 test 分支,用於對外發布的 release 分支,以及每個開發人員開發不同功能時用到的 feature_xx 分支等等。
1. 分支設置
我們常用的分支有3個(master 分支、dev 分支、test 分支)以及若干個 feature_xx 分支。
master
分支:是主分支,是最終上線代碼的分支,該分支被設置被保護分支(鎖住),普通開發人員沒有權限操作,只有團隊 leader 有合並的權限;dev
分支:是用於開發的分支,該分支被設置為默認 clone 的分支,也用於合並到 master 之前進行測試的分支,普通開發人員從遠程 clone 到本地的默認分支,可以進行合並等操作;test
分支:是用於測試的分支,測試人員可以將自己開發分支中的修改合並到 test 分支在測試環境進行測試,一般該分支不合並到任何分支;feature_xx
分支:是用戶開發自己模塊功能的特征分支,可以叫 feature_login, feature_ui, feature_payment 等與開發的功能相關的名稱,該分支上的功能開發完、測試無誤后可合並到 dev 分支上。
2. 普通開發人員的操作
普通開發人員,一般按照如下幾個步驟來進行開發、測試工作就可以了:
- 將遠程 dev 分支 clone 到本地,例如:
git clone git@github.com:xxx/xxx.git
; - 從 dev 分支拉出(新建)自己的 feature 分支用於開發,例如:
git checkout -b feature_login
; - 在自己的 feature 分支上進行開發工作;
- 開發完了用 add、commit 等操作提交到當前分支;
- 如果需要在測試環境進行測試,則將遠程 test 分支拉到本地,例如:
git branch test origin/test
; - 將自己的 feature 分支合並到 test 分支,並將 test 分支 push 到遠程,例如:
git rebase test
,git checkout test
,git merge feature_login
,git push origin test
;(注意:我們推薦用 rebase 來合並,以保證分支的整潔、美觀) - 通過公司的發布平台將遠程 test 分支發布到測試環境進行測試;
- 如果測試沒問題或者開始就不需要測試,這可以直接將當前 feature 分支合並到 dev 分支,並 push 到遠程庫,例如:
git rebase dev
,git checkout dev
,git merge feature_login
,git push origin dev
;(注意:我們推薦用 rebase 來合並,以保證分支的整潔、美觀) - 這時表示該功能已經開發完成了,代碼的 review 以及發布,需要團隊 leader 在合並到 master 操作時進行;這時可以刪除了自己的 feature 分支,例如:
git branch -d feature_login
; - 如果在 push 到遠程的時候提示需要先 pull 時,我們推薦使用 rebase 的方式:
git pull --rebase
以保持分支的整潔、美觀。
3. 團隊 leader 的操作
因為只有 leader 有操作 master 分支的權限,所以需要完成 dev 分支到 master 分支的合並,以及后續打 tag 和正式上線發布的工作:
- 先切換到 dev 分支,並拉取最新的狀態,例如:
git checkout dev
,git pull --rebase origin dev
; - 進行代碼 review 等過程后,合並到 master 分支,例如:
git rebase master
,git checkout master
,git merge dev
;(注意:我們推薦用 rebase 來合並,以保證分支的整潔、美觀) - 為本次完成的版本打上標簽,例如:
git tag v1.0 -m "release version 1.0"
; - 將本地合並后的 master 分支以及標簽 push 到遠程庫,例如:
git push orgin master --tags
。