天天看點

Git 完整學習筆記安裝 git送出檔案檢視 git 狀态檢視 git 版本曆史暫存區撤銷修改送出删除操作檢視遠端倉庫删除遠端倉庫添加遠端倉庫從遠端倉庫克隆分支管理多人協作的模式标簽忽略特殊檔案配置指令别名

文章目錄

  • 安裝 git
    • centos 安裝 git
    • ubuntu 安裝 git
  • 送出檔案
  • 檢視 git 狀态
  • 檢視 git 版本曆史
    • 回退版本
  • 暫存區
  • 撤銷修改
    • 未添加到暫存區
    • 已添加到暫存區,未送出到版本庫
    • 已送出到本地版本庫
  • 送出删除操作
  • 檢視遠端倉庫
  • 删除遠端倉庫
  • 添加遠端倉庫
  • 從遠端倉庫克隆
  • 分支管理
    • 分支的添加,删除,切換,檢視
    • 解決沖突
    • 分支管理政策
    • bug分支
    • feature分支
    • 推送分支
  • 多人協作的模式
  • 标簽
    • 建立标簽
    • 檢視所有标簽
    • 為之前的`commit`打上标簽
    • 檢視标簽具體資訊
    • 操作标簽
  • 忽略特殊檔案
  • 配置指令别名

安裝 git

centos 安裝 git

sudo yum install git
           

ubuntu 安裝 git

sudo apt-get install git
           

下載下傳完

git

後,在與遠端庫互動前首先要指定

name

email

(非必需),然後生成密鑰對:

[[email protected] ~]# git config --global user.name "lzj"
[[email protected] ~]# git config --global user.email "[email protected]"
[root@izuf6esjmghweowgd0ryazz ~]# ssh-keygen -t rsa -C "[email protected]"
           

找到

/{home}/.ssh/id_rsa.pub

檔案,将檔案内容(公鑰)放到遠端倉庫上即可

送出檔案

  1. 使用指令

    git init

    初始化

    git

    倉庫
  2. 使用指令

    git add test.txt

    把檔案添加到暫存區
  3. 使用指令

    git commit -m "a new txt"

    送出給版本庫,并添加本次送出的說明

可使用

git add .

将目前目錄下所有修改添加到暫存區

檢視 git 狀态

修改了檔案後,可按照如下的步驟送出檔案:

  1. 使用指令

    git status

    檢視結果
  2. 使用指令

    git diff

    檢視變更内容
  3. 确認了變更内容後使用指令

    git add test.txt

    添加到倉庫
  4. 再次使用指令

    git status

    得知将要被送出的修改包括

    test.txt

  5. 使用指令

    git commit -m msg test.txt

    送出到版本庫

随時使用

git status

掌握工作區的狀态

檢視 git 版本曆史

通過指令

git log

可檢視所有的版本變更記錄,會顯示從最近到最遠的送出日志

通過指令

git log --pretty=oneline

簡化輸出資訊,每行的前面一大串字母和數字的組合是十六進制的

commit id

(版本号)。由于是分布式的版本控制系統,每次送出産生的

commit id

都不同,避免了多人協作時的版本号沖突問題

回退版本

回退到上一個版本:

git reset --hard HEAD^

目前版本是

HEAD

, 上一個版本是

HEAD^

,上上個版本是

HEAD^^

,上100個版本是HEAD~100

回退後若想回到原來最新的版本,在保持指令行視窗不關的前提下,往上找到最新版本的

commit id

使用指令

git reset --hard 1094a

1094a

可以是

commit id

的前幾位,

git

會自己去找,也不能太短

如果關閉了指令行視窗,可以通過指令

git reflog

檢視每一次的指令,通過檢視

commit

的那一行版本号(第一個字段),再通過指令回複

暫存區

git add

實際上是将檔案存到暫存區(.git目錄下的index檔案就是暫存區),

git commit

就是将暫存區中的所有檔案送出到目前分支

每次修改若不

add

到暫存區,就不會被

commit

到目前分支

撤銷修改

未添加到暫存區

當檔案修改後,沒有

add

到暫存區時,使用指令

git checkout -- <file>

可将檔案恢複到和版本庫一樣的狀态

已添加到暫存區,未送出到版本庫

當修改的檔案後被

add

到暫存區,且未送出到版本庫,使用指令

git checkout -- <file>

可将檔案恢複到最近一次

add

到暫存區的狀态

也可使用

git reset

把暫存區的修改放回工作區

已送出到本地版本庫

使用

git reset

回退版本

注意:

當把修改

push

到遠端版本庫時,無法撤銷修改

送出删除操作

對于

git

來說删除也是一個修改,當在工作區中删除了一個檔案時,有兩個操作待選:

  1. git rm <file>

    添加删除到暫存區,再

    git commit -m <message> <file>

  2. 撤銷删除:git checkout – , 用版本庫的版本替換工作區的版本

檢視遠端倉庫

  1. 檢視遠端倉庫資訊使用

    git remote

  2. 檢視遠端倉庫詳細資訊

    git remote -v

删除遠端倉庫

git remote rm origin

添加遠端倉庫

github

上建立新的倉庫

learngit

,通過以下指令将本地庫與遠端庫關聯(

origin

是遠端倉庫的名稱,可以修改成其他的,如

github

):

git remote add origin https://github.com/<user-name>/learngit.git

将本地庫的内容推送到遠端庫:

git push -u origin master

第一次推送時可加上

-u

參數,

git

不但會把本地的

master

分支内容推送到遠端新的master分支,還會把本地的

master

分支和遠端的

master

分支關聯起來,在以後的推送或者拉取時就可以簡化指令

之後的推送就可以使用指令

git push origin master

git

svn

相比最大的好處就是在沒有網絡的情況下,也可以正常工作,隻要将修改送出給本地,待有網絡的時候推送到遠端庫,而

svn

在沒有網絡的情況下是無法正常工作的

從遠端倉庫克隆

github

上建立新的倉庫

gitskill

,使用以下指令克隆到本地:

git clone [email protected]:<user-name>/gitskill.git

git

支援多種協定,可使用

https

,也可使用

git

協定。預設的

git

協定使用的是

ssh

,速度最快,而

https

協定速度較慢,每次推送還要輸入密碼

分支管理

可以建立一個分支進行開發任務,這樣既不會影響别人在原來的分支上正常工作,也不怕丢失每天的任務進度,等開發完成後,可将自己的分支進行合并

分支的添加,删除,切換,檢視

應當使用分支完成某個任務,完成後合并到

master

分支,再删除原來的分支

檢視分支:

git branch

建立分支:

git branch <name>

切換分支:

git checkout <name>

建立+切換分支:

git checkout -b <name>

合并某分支到目前分支:

git merge <name>

删除分支:

git branch -d <name>

删除分支可以遵循以下兩步驟:

  1. 先從本地删除

git branch -d <branch-name>

(被

merge

到了其他分支)

git branch -D <branch-name>

(沒有被

merge

到其他分支)

  1. 删除遠端分支

git push origin :<branch-name>

解決沖突

當建立出了一個分支,在這條分支上做了修改并送出,主分支也做了修改并送出後,合并分支就會出現沖突,此時應手動解決沖突再進行送出操作

git log --graph

指令可以看到分支合并圖

分支管理政策

預設合并分支采用的是fast forward模式,此時删除分支後,會丢失分支資訊

禁用fast forward模式時,

git

會在合并時産生一個新的

commit

,會保留分支資訊(因為産生了新的送出,需要加上

message

使用指令

git merge **--no-ff** -m "merge with no-ff" dev

禁用fast forward模式來合并分支

使用指令

git log --graph --pretty=oneline --abbrev-commit

檢視分支曆史

注意:

master分支是非常穩定的,隻能用來釋出新版本

需要在dev分支上進行開發,不斷merge到dev上

合并分支時,加上

--no-ff

參數就可以用普通模式合并,合并後的曆史有分支,能看出來曾經做過合并,而fast forward合并就看不出來曾經做過合并

bug分支

修複bug時,可以通過建立新的bug分支進行修複,再merge到master,最後删除bug分支

若是目前有任務未完成,無法

commit

時,可以使用

git stash

儲存現場,然後修複

bug

。完成後,再通過

git stash pop

回到工作現場

若多次

git stash

,可使用指令

git stash list

檢視,然後恢複指定的stash,如:

git stash apply stash@{0}

feature分支

當接收到開發一個新功能的需求時,可以建立一個

feature

分支,若功能開發完畢後已送出,此時需求發生變動,該功能取消,而這時

feature

分支沒有

merge

dev

分支,需要使用以下指令删除

feature

分支:

git branch -D feature

推送分支

推送分支就是把本地的所有送出推送到遠端:

git push origin master

也可推送dev分支:

git push origin dev

bug

分支一般不需要

push

feature

分支若是與他人協作,可以

push

多人協作的模式

一般可以遵循以下步驟:

  1. 首先試圖推送:

    git push origin <branch-name>

  2. 若推送失敗,說明遠端庫更新,需要拉取遠端庫到本地:

    git pull

  3. 若有沖突,需要手動解決沖突,然後在本地送出
  4. 再用

    git push origin <branch-name>

    推送就能成功 (origin是遠端庫的名稱)
  5. 如果

    git pull

    提示

    no tracking information

    ,則說明本地分支和遠端分支的連結關系沒有建立,使用指令

    git branch --set-upstream-to <branch-name> origin/<branch-name>

    建立連結關系
  6. 若有需要,可在本地建立與遠端對應的分支:

    git checkout -b branch-name origin/branch-name

标簽

标簽(tag)與某個

commit

綁定在一起,可以通過

tag

快速找到某個

commit

,而不用依靠無意義的版本号(commit id)

建立标簽

使用指令

git tag v1.0

給最近的一個

commit

打上一個新标簽

v1.0

使用指令

git tag -a <tag-name> -m <tag-message> [<commit-id>]

建立帶有說明的标簽(-a 指定标簽名,-m 指定說明文字)

檢視所有标簽

git tag

為之前的

commit

打上标簽

  1. 使用指令

    git log --pretty=oneline --abbrev-commit

    檢視所有的

    commit

    記錄
  2. 使用指令

    git tag <tag-name> <commit-id>

    為某個版本打上标簽

檢視标簽具體資訊

标簽是按照字母順序排列的,使用指令

git show <tag-name>

檢視标簽的具體資訊

操作标簽

未推送到遠端時删除标簽:

git tag -d <tag-name>

推送某個标簽到遠端:

git push origin <tag-name>

推送所有标簽到遠端:

git push origin --tags

推送到遠端後删除标簽依次需要以下兩步:

  1. 先從本地删除:

    git tag -d <tag-name>

  2. 從遠端删除:

    git push origin[空][空]: refs/tags/<tag-name>

注意:

  • 從遠端删除标簽的指令中有個冒号,且冒号前面有一個空格
  • 可以了解為:将一個空推送給了後面的遠端

    tag

    ,進而删除了

    tag

忽略特殊檔案

所有 .gitignore 配置檔案可以線上找到:

https://github.com/github/gitignore

配置完後将 .gitignore 檔案送出即可

通過

git status

檢視工作目錄是否幹淨來檢驗配置檔案是否滿足要求

配置指令别名

若想用

git ci -m

代替

git commit -m

,可以用以下指令:

git config --global alias .ci commit

配置

git

的時候,加上

--global

是針對目前使用者起作用的,如果不加,那隻針對目前的倉庫起作用

config

位于

.git

目錄下,若要删除某項别名直接在檔案中删除對應的行即可

倉庫的

.git/config

隻儲存目前倉庫的

local

配置,而使用者的

global

配置在使用者主目錄下的

.gitconfig