文章目錄
- 安裝 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
檔案,将檔案内容(公鑰)放到遠端倉庫上即可
送出檔案
- 使用指令
初始化git init
倉庫git
- 使用指令
把檔案添加到暫存區git add test.txt
- 使用指令
送出給版本庫,并添加本次送出的說明git commit -m "a new txt"
可使用
git add .
将目前目錄下所有修改添加到暫存區
檢視 git 狀态
修改了檔案後,可按照如下的步驟送出檔案:
- 使用指令
檢視結果git status
- 使用指令
檢視變更内容git diff
- 确認了變更内容後使用指令
添加到倉庫git add test.txt
- 再次使用指令
得知将要被送出的修改包括git status
test.txt
- 使用指令
送出到版本庫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
來說删除也是一個修改,當在工作區中删除了一個檔案時,有兩個操作待選:
-
添加删除到暫存區,再git rm <file>
git commit -m <message> <file>
- 撤銷删除:git checkout – , 用版本庫的版本替換工作區的版本
檢視遠端倉庫
- 檢視遠端倉庫資訊使用
git remote
- 檢視遠端倉庫詳細資訊
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>
删除分支可以遵循以下兩步驟:
- 先從本地删除
git branch -d <branch-name>
(被
merge
到了其他分支)
git branch -D <branch-name>
(沒有被
merge
到其他分支)
- 删除遠端分支
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
多人協作的模式
一般可以遵循以下步驟:
- 首先試圖推送:
git push origin <branch-name>
- 若推送失敗,說明遠端庫更新,需要拉取遠端庫到本地:
git pull
- 若有沖突,需要手動解決沖突,然後在本地送出
- 再用
推送就能成功 (origin是遠端庫的名稱)git push origin <branch-name>
- 如果
提示git pull
,則說明本地分支和遠端分支的連結關系沒有建立,使用指令no tracking information
建立連結關系git branch --set-upstream-to <branch-name> origin/<branch-name>
- 若有需要,可在本地建立與遠端對應的分支:
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
打上标簽
commit
- 使用指令
檢視所有的git log --pretty=oneline --abbrev-commit
記錄commit
- 使用指令
為某個版本打上标簽git tag <tag-name> <commit-id>
檢視标簽具體資訊
标簽是按照字母順序排列的,使用指令
git show <tag-name>
檢視标簽的具體資訊
操作标簽
未推送到遠端時删除标簽:
git tag -d <tag-name>
推送某個标簽到遠端:
git push origin <tag-name>
推送所有标簽到遠端:
git push origin --tags
推送到遠端後删除标簽依次需要以下兩步:
- 先從本地删除:
git tag -d <tag-name>
- 從遠端删除:
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
中