Git學習筆記--日常基本使用
一、安裝Git
1、linux下安裝:
yum install -y git
2、windows下安裝:
從https://git-for-windows.github.io下載window版本git安裝包,提示安裝
二、配置Git
1、配置用戶名和郵箱:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
註:config 說明全局生效
2、查看配置信息:
git config --list
3、讓git命令行顯示顏色
git config --global color.ui true
4、 忽略特殊文件
Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去
https://github.com/github/gitignore
忽略文件的原則是:
1. 忽略操作系統自動生成的文件,比如縮略圖等;
2. 忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生的.class文件;
3. 忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。
git add -f App.class --強制提交忽略的文件
git check-ignore -v App.class --自動檢查文件被忽略的原因
例如:
/.idea/*
/conf/key.text
/.idea/workspace.xml
註:如果已提交到GIT的目錄或文件,已經被GIT管理,再添加.gitignore無效。 所以需要在項目初始化的時候就配置好.gitignore文件,或者遠程刪除。
5、配置別名
git config --global alias.st status
git config --global alias
git config --global alias.last ‘log -1‘
git config --global alias.lg "log --color --graph --pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset‘ --abbrev-commit"
三、使用Git
1、創建版本庫
mkdir -p /data/git/learngit --創建工作區 --遠程版本庫通常learngit.git結尾
cd /data/git/learngit --learngit目錄下為工作區,受git管理
git init --初始化版本庫,在目錄下多出.git隱藏目錄
2、添加文件到版本庫
git add readme.txt --第一步:添加文件到git暫存區
git commit -m "wrote a readme file" --第二步:提交修改到版本庫
3、查詢工作區狀態和對比修改內容
git status --查詢工作區狀態等信息
git diff --如果git status告知文件被修改,使用git diff可對比修改內容。
git diff readme.txt 對比工作區和版本庫的區別
git diff HEAD -- readme.txt 對比暫存區和版本庫的區別
4、版本回退
git log --列出版本提交信息(詳細信息)
git log --pretty=oneline --列出簡略版本提交信息
git log --graph --pretty=oneline --abbrev-commit 查看分支合並情況
git reset --hard HEAD^ 回退到上一版本,HEAD表示當前版本
git reset --hard HEAD~99 表示回退到上100個版本
git reset --hard <commit id> 回退到指定的版本
5、版本恢復
註意:當版本回退後,git log看不到最新版本的commit id了,恢復找不到id
git reflog 用於查看版本操作日誌,找到要恢復的commit id
git reset --hard <commit id> 恢復到指定的版本
6、撤銷更改
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令:
git checkout -- file --從工作區撤銷
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步:
git reset HEAD file 第一步用命令從暫存區撤銷,就回到了場景1
git checkout -- file 第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫:
git reset --hard HEAD^ 回退到上一版本
7、刪除文件
直接工作區刪除文件後
git rm test.py 將刪除提交暫存區
git commit -m "delete a test.py file" 提交版本庫
誤刪除的回退,參考撤銷更改章節
四、遠程倉庫
例子:如何是本地倉庫與github遠程倉庫同步;
1、生成SSH密鑰對並添加到github
ssh-keygen -t rsa -C "[email protected]"
將公鑰id.rsa.pub內容添加到github
路徑:https://github.com/honglimin29 --> Edit profile --> SSH and GPG keys
2、添加遠程倉庫並與本地倉庫關聯
添加遠程倉庫路徑:https://github.com/honglimin29 --> 點擊右上角+ --> 選擇New repository
例子1:本地創建對應倉庫並關聯遠程倉庫和推送代碼
echo "# learngit" >> README.md git init git add README.md git commit -m "first commit" git remote add origin [email protected]:honglimin29/learngit.git git push -u origin master
例子2:本地已有倉庫,直接關聯遠程倉庫並推送代碼
git remote add origin [email protected]:honglimin29/learngit.git git push -u origin master -- 將本地master分支推送到遠程倉庫master分支
git remote -v 用於查看已關聯的遠程倉庫
3、從遠程倉庫克隆
git clone [email protected]:honglimin29/learngit.git 克隆所有分支
git clone -b dev [email protected]:honglimin29/learngit.git 克隆dev單獨分支
或者:
git clone https://github.com/honglimin29/learngit http方式
git branch --查看本地分支
git branch -r -- 查看關聯的遠程倉庫分支
git checkout dev 切換分支
五、分支管理
1、創建並合並分支
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合並某分支到當前分支(fast-forward 合並不會創建新的提交點):git merge <name>
合並某分支到當前分支(非fast-forward模式,合並會創建新的提交點,方便回溯):git merge <name> --no-ff
刪除分支:git branch -d <name> 工作區無改動情況
強制刪除分支:git branch -D <name> 工作區有改動
2、解決沖突
當兩個分支修改了同一行時,就不能自動合並分支,需要手動解決沖突再提交
例子:
從dev分支創建了gd分支,同時修改指定文件某行並各自提交了一次,
然後git merge --no-ff gd 會提示沖突,手動解決沖突並提交即可
git log --graph --pretty=oneline --abbrev-commit --用於查看分支合並情況
3、分支管理策略
1)Git分支十分強大,在團隊開發中應該充分應用。
2)合並分支時,加上--no-ff參數就可以用普通模式合並,合並後的歷史有分支,能看出來曾經做過合並,而fast forward合並就看不出來曾經做過合並。
3)在實際開發中,我們應該按照幾個基本原則進行分支管理:
首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;
那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合並到master上,在master分支發布1.0版本;
你和你的小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合並就可以了。
所以,團隊合作的分支看起來就像這樣:
4、bug分支
場景:當前正在gd分支開發,並有修改在工作區沒有提交,但任務沒完成無法提交
此時接到一個bug修復的任務,需從dev分支創建issue-101的bug分支並嘗試修復
操作步驟:
1)將當前工作區放入暫存區
git stash --當前工作區放入暫存區
2)切換到dev分支
git checkout dev
3)創建issue-101分支
git checkout -b issue-101
4)修復bug並提交
git add readme.txt
git commit -m "fix bug 101"
5)切換到dev分支並合並
git checkout dev
git merge --no-ff -m "merge a bug issue-101 branch" issue-101
6)刪除issue-101分支
git branch -d issue-101
7)切換回gd分支恢復工作區繼續開發
git checkout gd
git status
git stash list --查看暫存區列表
git stash apply 暫存區恢復到工作區
git stash drop 刪除暫存區內容
git stash pop 恢復工作區並刪除暫存區
可以多次git stash 並用 git stash apply stash@{0} 選定要恢復的工作區
5、Feature分支
開發一個新feature,最好新建一個分支,和bug分支一樣,功能完成後再合並;
如果要丟棄一個沒有被合並過的分支,可以通過git branch -D <name>強行刪除。
6、多人協作
場景:有個遠程倉庫共有master和dev兩個分支,從遠程倉庫克隆,然後在本地修改後提交並推送
git clone [email protected]:honglimin29/learngit --克隆倉庫
git remote -v --查看遠程倉庫
git branch -r --查看遠程分支
git branch --查看本地分支,首次克隆只有master分支
git checkout -b dev origin/dev --本地創建dev分支並與遠程dev分支關聯
git push origin dev --將本地dev分支推送到遠程dev分支
如果推送有沖突,就用git pull拉取代碼,並手動解決沖突在推送
如果git pull失敗
git branch --set-upstream dev origin/dev 將本地dev分支和遠程dev關聯上
多人協作的工作模式通常是這樣
- 首先,可以試圖用git push origin branch-name推送自己的修改;
- 如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合並;
- 如果合並有沖突,則解決沖突,並在本地提交;
- 沒有沖突或者解決掉沖突後,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建, 用命令git branch --set-upstream branch-name origin/branch-name。
小結
-
- 查看遠程庫信息,使用git remote -v;
- 本地新建的分支如果不推送到遠程,對其他人就是不可見的;
- 從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;
- 在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;
- 建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name;
- 從遠程抓取分支,使用git pull,如果有沖突,要先處理沖突。
六、標簽管理
1、創建標簽
git tag <tagname> --用於新建一個標簽,默認為HEAD,也可以指定一個commit id
git tag -a <tagname> -m "標簽說明" --可以指定標簽說明
git tag -s <tagname> -m "標簽說明" --可以用PGP簽名標簽
git tag --查看所有標簽
git show <tagname> --查看指定標簽詳細信息
2、操作標簽
git push origin <tagname> --可以推送一個本地標簽;
git push origin --tags --可以推送全部未推送的標簽
git tag -d <tagname> --可以刪除一個本地標簽
git push origin :refs/tags/<tagname> -可以刪除一個遠程標簽
七、搭建GIT服務器
1、安裝git
yum install -y git
2、創建git用戶
groupadd git
useradd git
3、創建證書登錄
收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰導入 到/home/git/.ssh/authorized_keys文件裏,一行一個
4、初始化Git倉庫
mkdir -p data/git/learngit.git
git init --bare data/git/learngit.git
說明:--bare創建的裸倉庫沒有工作區,因為服務器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到服務器上去改工作區,並且服務器上的Git倉庫通常都以.git結尾
cd data/git/
chown -R git:git learngit.git/
5、禁用shell登錄
出於安全考慮,第二步創建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似下面的一行
git:x:1001:1001:,,,:/home/git:/bin/bash
改為:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
6、克隆遠程倉庫
git clone git@server:/data/git/learngit.git
並創建master 和 dev分支,master分支比較穩定用來發布版本,dev分支用來開發
Git學習筆記--日常基本使用