1. 程式人生 > >Git學習筆記--日常基本使用

Git學習筆記--日常基本使用

ret 忽略文件 不可見 git學習 個人 fast 撤銷 其他人 交點

一、安裝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

.unstage ‘reset HEAD‘

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關聯上

多人協作的工作模式通常是這樣

    1. 首先,可以試圖用git push origin branch-name推送自己的修改;
    2. 如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合並;
    3. 如果合並有沖突,則解決沖突,並在本地提交;
    4. 沒有沖突或者解決掉沖突後,再用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學習筆記--日常基本使用