0x0 Git常用命令速查表
0x1 Git是什么?
Git是一個(gè)開源的分布式版本控制系統(tǒng)拾给,可以有效蒋得、高速地處理從很小到非常大的項(xiàng)目版本管理。
Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件饮焦。
Git的主要功能:
1县踢、查看郵件或者通過其它方式查看一般開發(fā)者的提交狀態(tài)疏之。
2锋爪、打上補(bǔ)丁,解決沖突(可以自己解決亏镰,也可以要求開發(fā)者之間解決以后再重新提交拯爽,如果是開源項(xiàng)目毯炮,還要決定哪些補(bǔ)丁有用,哪些不用)篮幢。
3三椿、向公共服務(wù)器提交結(jié)果葫辐,然后通知所有開發(fā)人員。
0x2蛋叼、基于CentOS7安裝git服務(wù)
主機(jī)規(guī)劃
名稱 | 主機(jī)規(guī)劃 | 內(nèi)存 | 安裝軟件 | 系統(tǒng) |
---|---|---|---|---|
git_server | 10.0.0.11 | 4G | yum install -y git | Centos7.6 1810 |
git_client | 10.0.0.12 | 4G | yum install -y git | Centos7.6 1810 |
git_client | 10.0.0.13 | 64G | Git+XShell | Windows10 64 |
Step 1 安裝git服務(wù)
yum install -y git
[root@gitServer ~]# git --version
git version 1.8.3.1
Step 2 創(chuàng)建一個(gè)git用戶組和用戶鸦列,用來運(yùn)行g(shù)it服務(wù)
#查看git用戶是否存在
[root@gitServerhome]#id git
id: git: no such user #提示git用戶不存在
groupadd git #創(chuàng)建用戶
useradd git -g git
#方法一設(shè)置git用戶的密碼
passwd git
#方法二也可以設(shè)置密碼
echo git:123456|chpasswd
Step3 創(chuàng)建代碼倉庫git的擁有者
#進(jìn)入home目錄
cd /home
#現(xiàn)有倉庫導(dǎo)出為裸倉庫——即一個(gè)不包含當(dāng)前工作目錄的倉庫
git init --bar project.git
#把倉庫所屬用戶改為git
#-R : 處理指定目錄以及其子目錄下的所有文件
#將目前目錄下的所有文件與子目錄的擁有者皆設(shè)為 git 群體的使用者 git :
chown -R git:git project.git
#以后每創(chuàng)建一個(gè)新的倉庫.都需要執(zhí)行上面的命令(修改倉庫所屬用戶為git)
這一步很重要,如果沒有這一步,提交代碼的時(shí)候報(bào)權(quán)限錯(cuò)誤纤泵。
———————————————————————————
0x3捏题、客戶端通過終端或GUI工具遷代碼
這里為了安全性我們沒有設(shè)置客戶端的免密登陸!4洹窟社!如果覺得每次輸入密碼比較繁瑣绪钥,可以設(shè)置免密登陸程腹。
步驟 | 命令 | 實(shí)例 | 協(xié)議 |
---|---|---|---|
第一步 | git clone | git clone git@10.0.0.11:/home/git/project.git | SSH |
第一步 | git clone | http://git.kernel.org/pub/scm/virt/kvm/kvm.git | HTTP |
第一步 | git clone | https://git.kernel.org/pub/scm/virt/kvm/kvm.git | HTTPS |
第二步 | cd 項(xiàng)目目錄 | cd project | 無 |
第三步 | git add | git add index.html或git add . | 無 |
第四步 | git commit | git commit -m "備注" | 無 |
第四步 | git config | git config --global user.email "xxxx@163.com" | 無 |
第四步 | git config | git config --global user.name "xxxx" | 無 |
第五步 | git remote | git remote add origin git@10.0.0.11:/home/git/project.git | SSH |
第六步 | git push | git push -u origin master | SSH |
【注意】這里第一步我們給出了三種方式寸潦,這幾種方式都可以见转,都是基于不同協(xié)議的克隆項(xiàng)目的方式。除了我們在終端下或GUI的環(huán)境中添加項(xiàng)目以外咏雌,我們常見的IDE集成開發(fā)環(huán)境中也集成了Git的應(yīng)用赊抖。比如XCode寨典、PHPStrom等。如下圖
以下是在終端中命令行方式操作
git clone git@10.0.0.11:/home/git/project.git
#開發(fā)人員進(jìn)入到項(xiàng)目目錄
cd project
#添加修改以后的代碼源文件
echo "readme">>readme.md
#添加到git中
git add .
#提交日志
git commit -m "add readme.md"
#全局配置git信息
git config --global user.email "xxxx@163.com"
git config --global user.name "xxxx"
git config --global color.ui true #帶顏色的顯示
#同步遠(yuǎn)程庫
git remote add origin git@10.0.0.11:/home/git/project.git
#提交代碼
git push -u origin master #-u指定默認(rèn)主機(jī)
第一次push提交需要-u指定主機(jī)婴噩,以后就直接push即可
git push origin master #將本地的master分支推送到origin主機(jī)的master分支栽烂。如果后者不存在,則會(huì)被新建矾策。
注意:git config的配置信息
名稱 | 主要參數(shù) |
---|---|
git config用戶信息 | --global user.name |
git config用戶信息 | --global user.email |
git config文本編輯 | --global core.editor |
git config差異分析 | --global merge.tool |
git config顏色顯示 | --global color.ui |
git config配置信息 | --list |
0x4扫尺、通過Git log查看日志記錄
名稱 | 主要參數(shù) | 例子 |
---|---|---|
git log | 查看提交的歷史記錄 | git log |
git log | --oneline 顯示簡潔的版本 | git log --oneline |
git log | --oneline 顯示簡潔的版本 | git log --oneline -5 |
git log | --reverse逆序輸出 | git log --reverse --oneline |
git log | --author查找指定作者 | git log --author=xxxxx --oneline |
git log | --befire --after時(shí)間段查找 | git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges |
#查看提交的歷史記錄
git log
#可以用 --oneline 選項(xiàng)來查看歷史記錄的簡潔的版本
git log --oneline
9cc3008 add a.txt
c01d88c add index.html
#用 --reverse 參數(shù)來逆向顯示所有日志
git log --reverse --oneline
#如果只想查找指定用戶的提交日志可以使用命令:git log --author
git log --author=xxxxx --oneline -5
#如果你要指定日期苗分,可以執(zhí)行幾個(gè)選項(xiàng):--since 和 --before摔癣,但是你也可以用 --until 和 --after纬向。
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
5、分支管理
git branch 分支管理
名稱 | 主要參數(shù) |
---|---|
git branch | 查看分支 |
git branch 分支名稱 | 創(chuàng)建分支 |
git checkout 分支名稱 | 切換分支 |
git merge 要合并的分支 | 分支合并(可能產(chǎn)生沖突)注意:切換分支再合并 |
5.1企業(yè)分支管理使用案例
需求分析:前端開發(fā)部門或后臺開發(fā)部門需要下班以后在家或周末在家進(jìn)行代碼的開發(fā),主分支保存在公司的服務(wù)器上膳帕。
查看當(dāng)前的分支 只有master
[root@kvm03 projiect_bare]# git branch
* master
創(chuàng)建一個(gè)一個(gè)分支dev (開發(fā)的分支)
git branch dev
再次查看分支情況危彩,已經(jīng)有dev分支
[root@kvm03 projiect_bare]# git branch
dev
* master
切換分支注意分支之前的星號
[root@kvm03 projiect_bare]# git checkout dev
Switched to branch 'dev'
[root@kvm03 projiect_bare]# git branch
* dev
master
合并master和dev分支
[root@kvm03 projiect_bare]# git merge master
Already up-to-date.
開發(fā)創(chuàng)建新的文件內(nèi)容或修改代碼內(nèi)容
[root@kvm03 projiect_bare]# touch readme.md
[root@kvm03 projiect_bare]# git add .
[root@kvm03 projiect_bare]# git commit -m "add readme.md"
[dev a1af437] add readme.md
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme.md
[root@kvm03 projiect_bare]# git push origin dev
git@10.0.0.158's password:
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 276 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
* [new branch] dev -> dev
5.2下班或周末在家里進(jìn)行開發(fā)
開發(fā)人員不管是在家里工作還是在公司工作汤徽,不需要每次都git clone項(xiàng)目谒府,通過checkout dev切換分支,通過git pull拉取最新的項(xiàng)目代碼泰鸡。然后正常從事開發(fā)工作壳鹤。
切換到dev分支
[root@kvm03 projiect_bare]# git checkout dev
Already on 'dev'
拉代碼
[root@kvm03 projiect_bare]# git pull origin dev
git@10.0.0.158's password:
From 10.0.0.158:/home/git/projiect_bare
* branch dev -> FETCH_HEAD
Already up-to-date.
[root@kvm03 projiect_bare]# touch b.txt
[root@kvm03 projiect_bare]# git add .
[root@kvm03 projiect_bare]# git commit -m "add b.txt"
[dev 300b6ed] add b.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 b.txt
[root@kvm03 projiect_bare]# git push origin dev
git@10.0.0.158's password:
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 219 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
a1af437..300b6ed dev -> dev
5.2 到公司以后開發(fā)流程
開發(fā)人員不管是在家里工作還是在公司工作余舶,不需要每次都git clone項(xiàng)目,通過checkout dev切換分支赠制,通過git pull拉取最新的項(xiàng)目代碼千扔。然后正常從事開發(fā)工作。注意上線過程曲楚。
切換到dev分支
[root@kvm03 projiect_bare]# git checkout dev
Already on 'dev'
拉代碼
[root@kvm03 projiect_bare]# git pull origin dev
git@10.0.0.158's password:
From 10.0.0.158:/home/git/projiect_bare
* branch dev -> FETCH_HEAD
Already up-to-date.
[root@kvm03 projiect_bare]# touchc.txt
[root@kvm03 projiect_bare]# git add .
[root@kvm03 projiect_bare]# git commit -m "add c.txt"
[dev 300b6ed] add c.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 c.txt
[root@kvm03 projiect_bare]# git push origin dev
git@10.0.0.158's password:
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 219 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
a1af437..300b6ed dev -> dev
#切換分支到master
[root@kvm03 projiect_bare]# git checkout master
Switched to branch 'master'
#合并分支dev與master
[root@kvm03 projiect_bare]# git merge dev
Updating 9cc3008..300b6ed
Fast-forward
c.txtt | 0
b.txt | 0
readme.md | 0
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 c.txt
create mode 100644 b.txt
create mode 100644 readme.md
#dev分支合并master分支代碼上線
[root@kvm03 projiect_bare]# git push origin master
git@10.0.0.158's password:
Total 0 (delta 0), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
9cc3008..300b6ed master -> master
5.3 因?yàn)槠诩影?約妹子....忘了提交代碼!E玳埂O澈浮!(企業(yè)真實(shí)開發(fā)案例)
在公司上班期間操作忙著給妹子調(diào)bug叽讳,手把手輔導(dǎo)坟募。懈糯。妹子為了回報(bào)。請吃飯她紫。屿储。∥辏看電影。买羞。畜普。帶身份證H阂丁=至ⅰ!然后得意忘形逛犹。梁剔。。忘了push今天的代碼码撰。悲劇開始了脖岛。
情景再現(xiàn)
在公司上班的場景
git chenckout dev
開發(fā)些了N多代碼
git add .
git commit -m "xxxxx"
為了給妹子手把手輔導(dǎo)砾省!忘記了push......
回家以后繼續(xù)寫代碼的場景
git chenckout dev
開發(fā)些了N多代碼
git add .
git commit -m "xxxxx"
git push origin dev #正常提交
第二天上班以后
git chenckout dev
git status #看一下沖突的位置和內(nèi)容 手動(dòng)修改后再次開發(fā)
有合并可能出現(xiàn)沖突编兄,如有沖突需要手動(dòng)解決沖突以后
繼續(xù)開發(fā)些了N多代碼
git add .
git commit -m "xxxxx"
git push origin dev #正常提交
總結(jié) git沖突的場景
情景一:多個(gè)分支代碼合并到一個(gè)分支時(shí)狠鸳;
情景二:多個(gè)分支向同一個(gè)遠(yuǎn)端分支推送代碼時(shí);
解決情景一:在當(dāng)前分支上卸察,直接修改沖突代碼--->add--->commit铅祸。
解決情景二:在本地當(dāng)前分支上,修改沖突代碼--->add--->commit--->push
Git官方文檔可以參考
https://git-scm.com/book/zh/v2