git命令自動補(bǔ)全(MAC)
1.安裝Homebrew
一 瘸羡、安裝bash-completion
$ brew install bash-completion
- 將
'' if [ -f $(brew --prefix)/etc/bash_completion ]; then
'' . $(brew --prefix)/etc/bash_completion
'' fi
添加到~/.bash_profile
(如果沒有該文件,新建一個)
二臭蚁、拷貝文件最铁、設(shè)置路徑
訪問下面網(wǎng)站
{https://github.com/git/git.git}
找到”contrib/completion/”目錄下的git-completion.bash ,然后點擊編輯垮兑,拷貝其內(nèi)容冷尉,復(fù)制到文本文件,保存為 git-completion.bash 文件 然后將文件用命令拷貝到 ~/ 目錄下
三系枪、配置~/.bash_profile
在~/.bash_profile
文件(該目錄下如果沒有雀哨,新建一個)中添加下邊的內(nèi)容:
source ~/.git-completion.bash
執(zhí)行命令:source ~/.bash_profile
1. 安裝git
Ubuntu: sudo apt-get install git
Mac: brew install git
2. git 基本使用
? {版本的創(chuàng)建和回退}
? {工作區(qū)和暫存區(qū)}
? {管理修改}
? {撤銷修改}
? {對比文件不同}
? {刪除文件}
2.1 版本的創(chuàng)建和回退
- 初始化倉庫
git
- 創(chuàng)建一個git版本庫
git
- 創(chuàng)建版本
git add 文件或目錄
git commit -m '版本信息說明'
(img) - 查看版本記錄
git log
或git log --pretty=oneline
# 一行顯示
**git reflog
# 查看所有操作記錄 - 版本回退
git reset --hard HEAD^
#^
表示回退到上一個版本
等價git reset --hard HEAD~數(shù)字
# 數(shù)字對應(yīng)回退到第幾個版本
或者git reset --hard 版本序列號
# 回退到指定版本
2.2 工作區(qū)和暫存區(qū)(img)
? 第一步:
git add
把工作區(qū)文件的修改添加到暫存區(qū);
? 第二步:
git commit
提交更改,把{暫存區(qū)}的所有內(nèi)容提交到{當(dāng)前分支}雾棺。
查看當(dāng)前工作樹的狀態(tài):
git status
2.3 管理修改
::git管理的文件的修改膊夹,它只會提交暫存區(qū)的修改來創(chuàng)建版本。::
2.4 撤銷修改
git checkout -- <文件>
# 丟棄工作區(qū)的改動
git reset HEAD <文件>
可以把暫存區(qū)的修改撤銷掉捌浩,重新放回工作區(qū)放刨。
{小結(jié)}
? 場景1:::當(dāng)你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時尸饺,用命令git checkout -- file进统。::
? 場景2:::當(dāng)你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時浪听,想丟棄修改螟碎,分兩步,第一步用命令git reset HEAD file迹栓,就回到了場景1掉分,第二步按場景1操作。::
? 場景3:::已經(jīng)提交了不合適的修改到版本庫時克伊,想要撤銷本次提交酥郭,參考版本回退一節(jié)。::
2.5 對比文件不同
- 對比工作區(qū)和版本中文件的不同
git diff HEAD -- 文件名
git checkout -- <文件>
# 丟棄工作區(qū)的改動 - 對比兩個版本之間某個文件的不同
1)對比HEAD 和 HEAD^ 中code.txt的不同:
git diff HEAD HEAD^ code.txt
2.6 刪除文件
(1) 我們把目錄中的code2.txt刪除答毫,git status
查看工作樹的狀態(tài)褥民。
git status
命令會立刻提示哪些文件被刪除了。(img)
(2) 現(xiàn)在你有兩個選擇洗搂,一是確實要從版本庫中刪除該文件消返,那就用命令git rm
刪掉,并且git commit
(img)
誤刪恢復(fù): git checkout -- code2.txt
,這樣文件code2.txt又回來了
{小結(jié)}
::命令git rm用于刪除一個文件耘拇。如果一個文件已經(jīng)被提交到版本庫撵颊,那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心惫叛,你只能恢復(fù)文件到最新版本倡勇,你會丟失最近一次提交后你修改的內(nèi)容。::
3 分支管理
作用:
? 分支之間的互不影響這種特性可以增加團(tuán)隊合作的效率嘉涌。GIT分支的另外一個重要特性就是可以合并不同軟件倉庫(fork)的分支
3.1 創(chuàng)建與合并分支
(1) 一開始的時候妻熊,master分支是一條線,git用master指向最新的提交仑最,再用HEAD指向master扔役,就能確定當(dāng)前分支,以及當(dāng)前分支的提交點警医。
(img)
每次提交亿胸,master分支都會向前移動一步坯钦,這樣,隨著你不斷提交侈玄,master分支的線也越來越長婉刀。
(2) 當(dāng)我們創(chuàng)建新的分支,例如dev時序仙,git新建了一個指針叫dev突颊,指向master相同的提交,再把HEAD指向dev潘悼,就表示當(dāng)前分支在dev上洋丐。
(img)
git創(chuàng)建一個分支很快,因為除了增加一個dev指針挥等,改變HEAD的指向,工作區(qū)的文件都沒有任何變化堤尾。
(3) 不過肝劲,從現(xiàn)在開始,對工作區(qū)的修改和提交就是針對dev分支了郭宝,比如新提交一次后辞槐,dev指針往前移動一步,而master指針不變粘室。
(img)
(4) 假如我們在dev上的工作完成了榄檬,就可以把dev合并到master上。git怎么合并呢衔统?最簡單的方法鹿榜,就是直接把master指向dev的當(dāng)前提交,就完成了合并锦爵。
(img)
git合并分支也很快舱殿,就改改指針,工作區(qū)內(nèi)容也不變险掀。
(5) 合并完分支后沪袭,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉樟氢,刪掉后冈绊,我們就剩下了一條master分支。
(img)
命令:
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建并切換分支:git branch -b <name>
合并某個分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>
3.2 合并沖突解決
- 當(dāng)兩個分支對同一個文件做了修改之后, 合并分支會沖突.
-
git status
告訴我們沖突的文件埠啃。 - git用<<<<<<<死宣,=======,>>>>>>>標(biāo)記出不同分支的內(nèi)容修改之后才能解決沖突, 解決之后再
git commit 文件名
提交 -
git log --graph --pretty=oneline
查看分支合并情況 - 合并完成, 刪除分支
3.3 合并分支策略
{快速合并模式}: fast forward
分支上新建一個文件并提交到版本控制, 再合并分支則不能快速合并,git會提示輸入合并信息說明. 輸入之后, git 會合并內(nèi)容并自動創(chuàng)建一次新的提交.
禁用fast forward合并
git merge --no-ff -m '版本說明' 分支名
--no-ff參數(shù)霸妹,表示禁用Fast forward合并
3.4 bug分支
- 保存當(dāng)前工作現(xiàn)場,等修復(fù)bug之后繼續(xù)工作
git stash
- 創(chuàng)建bug-001分支修復(fù)bug
- 確定要在哪個分支上修復(fù)bug, 假定要在master分支上修復(fù), 就從master創(chuàng)建臨時分支
- 現(xiàn)在修復(fù)bug代碼, 然后提交
- 修復(fù)完成之后, 切換master分支, 并完成合并, 最后刪除bug-001分支.
-
git stash list
查看保存的工作現(xiàn)場,git stash pop
恢復(fù)工作現(xiàn)場
{小結(jié)}
::修復(fù)bug時十电,我們會通過創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并,最后刪除鹃骂; 當(dāng)手頭工作沒有完成時台盯,先把工作現(xiàn)場git stash
一下,然后去修復(fù)bug畏线,修復(fù)后静盅,再git stash pop
,恢復(fù)工作現(xiàn)場寝殴。::
4 使用GitHub
4.1 創(chuàng)建倉庫
(1) 注冊github賬戶蒿叠,登錄后,點擊"New respository"蚣常。(img)
(2) 在新頁面中市咽,輸入項目的名稱,勾選'readme.md'抵蚊,點擊'create repository'施绎。(img)(img)
4.2 添加ssh賬戶
::如果某臺機(jī)器需要與github上的倉庫交互,那么就要把這臺機(jī)器的ssh公鑰添加到這個github賬戶上贞绳。::
(1) 在ubuntu的命令行中谷醉,回到用戶的主目錄下,編輯文件.gitconfig冈闭,修改某臺機(jī)器的git配置俱尼。(img)
(2) 使用如下命令生成ssh密鑰。(img)
ssh-keygen -t rsa -C '郵箱地址'
(3)進(jìn)入主目錄下的.ssh文件件萎攒,下面有兩個文件遇八。
公鑰為id_rsa.pub
私鑰為id_rsa
查看公鑰內(nèi)容,復(fù)制此內(nèi)容耍休。(img)
(4) 點擊賬戶頭像后的下拉三角押蚤,選擇'settings'。(img)
(5) 點擊'SSH and GPG keys'羹应,然后點擊'New SSH Key'添加ssh公鑰揽碘。(img)
(6) 到瀏覽器中粘貼ssh公鑰,點擊'Add SSH Key'园匹。
(img)
4.3 克隆項目
(1) 在瀏覽器中點擊進(jìn)入github首頁雳刺,再進(jìn)入項目倉庫的頁面。(img)
(2) 復(fù)制git地址裸违。
(img)
(3) 回到自己的電腦上掖桦,使用如下命令克隆項目。(img)
git clone 克隆地址
(4) 克隆出錯供汛,執(zhí)行如下命令解決枪汪。(img)
eval "$(ssh-agent -s)"
ssh-add
(5) 在命令行中繼續(xù)執(zhí)行上面的克隆倉庫命令涌穆。(img)
4.4 遠(yuǎn)程交互
-
上傳分支
(1) 項目克隆到本地之后,執(zhí)行git checkout -b smart
創(chuàng)建分支smart.
(2)創(chuàng)建一個code.py并提交一個版本
(3)推送分支-
git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
例子:git push origin smart
-
-
跟蹤遠(yuǎn)程分支
-
git branch --set-upstream-to=origin/遠(yuǎn)程分支名 本地分支名
例子:(1) 執(zhí)行如下命令讓本地smart分支跟蹤遠(yuǎn)程smart分支雀久。
git branch --set-upstream-to=origin/smart smart
-
-
從遠(yuǎn)程分支上拉取代碼
-
git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
例子: #(1) 把遠(yuǎn)程分支smart上的代碼下載并合并到本地所在分支
git pull origin smart
-
5 項目中的Git
開發(fā)時的分支
一般在開發(fā)時宿稀,遠(yuǎn)程庫上會有兩個主要分支master分支和dev分支。
{master}:用戶保存發(fā)布的項目代碼赖捌。V1.0,V2.0
{dev}:保存開發(fā)過程中的代碼祝沸。
項目經(jīng)理
? 1) 項目經(jīng)理搭建項目的框架。
? 2) 搭建完項目框架之后越庇,把項目框架代碼放到服務(wù)器罩锐。
普通員工
? 1) 在自己的電腦上,生成ssh公鑰卤唉,然后把公鑰給項目經(jīng)理涩惑,項目經(jīng)理把它添加的服務(wù)器上面。
? 2) 項目經(jīng)理會給每個組員的項目代碼的地址桑驱,組員把代碼下載到自己的電腦上境氢。
? 3) 切換到dev分支,并創(chuàng)建新的分支碰纬。
? 4) 每天在自己的分支上開發(fā)代碼。
? 5) 每一個員工開發(fā)完自己的代碼之后问芬,都需要將自己的代碼合并到本地的dev分支悦析,然后將代碼發(fā)布遠(yuǎn)程的dev分支上。