Git介紹
Git是目前最先進(jìn)的分布式版本控制系統(tǒng)
那什么是版本控制系統(tǒng)姓言?
如果有一個(gè)軟件代承,不但能自動(dòng)幫我記錄每次文件的改動(dòng)胆敞,還可以讓同事協(xié)作編輯悴能,這樣就不用自己管理一堆類似的文件了,也不需要把文件傳來(lái)傳去获询。如果想查看某次改動(dòng)涨岁,只需要在軟件里瞄一眼就可以
這就是git的初衷
集中式 vs 分布式
集中式版本控制系統(tǒng)是將版本庫(kù)存放在中央服務(wù)器,每次干活之前和提交修改之后都要和中央服務(wù)器同步數(shù)據(jù)筐付,所以必須聯(lián)網(wǎng)才能工作卵惦,受網(wǎng)速限制阻肿。而且如果中央服務(wù)器壞了瓦戚,版本庫(kù)就沒(méi)了
分布式版本控制系統(tǒng)沒(méi)有中央服務(wù)器,每個(gè)人的電腦上都有完整的版本庫(kù)丛塌,不需要聯(lián)網(wǎng)就能工作(但是會(huì)有一臺(tái)電腦充當(dāng)“中央服務(wù)器”较解,僅僅是用來(lái)方便交換大家的修改),也不用擔(dān)心某個(gè)版本庫(kù)出問(wèn)題赴邻。分步式系統(tǒng)更強(qiáng)大的地方還在于它的分支管理
安裝Git
- 安裝homebrew 然后通過(guò)homebrew安裝Git 文檔
- 安裝Xcode印衔,然后運(yùn)行Xcode 選擇菜單“Xcode - Preferences - Downloads - Command Line Tools”
創(chuàng)建版本庫(kù)
任意一個(gè)位置執(zhí)行:
$ mkdir learngit
learngit文件夾用來(lái)存放git倉(cāng)庫(kù)
通過(guò)git init
把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù)
$ git init
Initialized empty Git repository in /Users/zhenguanqing/learngit/.git/
此時(shí)這個(gè)文件夾就是一個(gè)空的git倉(cāng)庫(kù) 文件夾下會(huì)多一個(gè).git 隱藏文件,里面保存的是各種倉(cāng)庫(kù)信息姥敛,不要隨便改動(dòng)
版本控制系統(tǒng)只能跟蹤文本文件的改動(dòng)奸焙,比如TXT,代碼等,無(wú)法跟蹤二進(jìn)制文件的改動(dòng)与帆,比如圖片了赌、視頻、Word文件
對(duì)新建文件的操作
將新建的某個(gè)文件添加到倉(cāng)庫(kù):
$ git add xxx
xxx代表添加的文件名
將所有新建的文件添加到倉(cāng)庫(kù)
$ git add .
將文件提交到倉(cāng)庫(kù)
$ git commit -m "xxxxx"
-m后邊 雙引號(hào)中的內(nèi)容為提交的注釋 會(huì)展現(xiàn)在歷史記錄中
commit
命令可以一次提交很多文件玄糟,所以你可以多次add不同的文件之后再執(zhí)行一次commit
命令提交所有文件
遠(yuǎn)程倉(cāng)庫(kù)
關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)
在GitHub(或其他的代碼托管平臺(tái))創(chuàng)建一個(gè)倉(cāng)庫(kù)勿她,然后將本地的倉(cāng)庫(kù)與GitHub上的倉(cāng)庫(kù)關(guān)聯(lián)
$ git remote add origin git@github.com:xxx/xxx.git
add origin后面的是GitHub上的倉(cāng)庫(kù)地址,可以使HTTPS協(xié)議或者git協(xié)議(需要在代碼托管平臺(tái)添加自己電腦的SSH Key阵翎,方法很簡(jiǎn)單)
然后將本地倉(cāng)庫(kù)所有的內(nèi)容推送到遠(yuǎn)程倉(cāng)庫(kù)上
$ git push -u origin master
如果出現(xiàn)類似下方這樣的提示逢并,表示關(guān)聯(lián)成功了
Enumerating objects: 73, done.
Counting objects: 100% (73/73), done.
Delta compression using up to 4 threads
Compressing objects: 100% (62/62), done.
Writing objects: 100% (72/72), 690.35 KiB | 1.98 MiB/s, done.
Total 72 (delta 12), reused 0 (delta 0)
remote: Resolving deltas: 100% (12/12), done.
To github.com:zhenguanqing/DataStructureAndAlgorithm.git
04a7d8a..81fe63e master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
注:開(kāi)始這一步總是失敗,原因是創(chuàng)建的遠(yuǎn)程倉(cāng)庫(kù)必須為一個(gè)純空倉(cāng)庫(kù)郭卫,任何文件都不能有砍聊,否則git會(huì)認(rèn)為這是兩個(gè)分支,解決方法是先把遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容更新到本地:
git pull origin master
如果報(bào)錯(cuò)fatal: refusing to merge unrelated histories
可以使用
git pull --allow-unrelated-histories origin master
來(lái)達(dá)到更新的目的
--allow-unrelated-histories
會(huì)允許關(guān)聯(lián)兩個(gè)分支的歷史分支
從遠(yuǎn)程倉(cāng)庫(kù)克隆
關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)還可以先創(chuàng)建遠(yuǎn)程庫(kù)箱沦,然后克隆到本地辩恼,這種方式更常使用,因?yàn)橛锌赡苣闶菑陌肼烽_(kāi)始開(kāi)發(fā)這個(gè)項(xiàng)目的谓形,此時(shí)這個(gè)項(xiàng)目已經(jīng)存在了灶伊,當(dāng)然也可以先在代碼托管平臺(tái)上創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)然后克隆到本地從零開(kāi)始開(kāi)發(fā)
此時(shí)拿到遠(yuǎn)程倉(cāng)庫(kù)地址后使用命令git clone
克隆一個(gè)倉(cāng)庫(kù)(在任意一個(gè)文件夾目錄下執(zhí)行都可以,克隆成功后本地倉(cāng)庫(kù)就存在于這個(gè)文件夾下)
$ git clone git@github.com:xxx/xxx.git
例如:
$ git clone git@github.com:zhenguanqing/DataStructureAndAlgorithm.git
Cloning into 'DataStructureAndAlgorithm'...
remote: Enumerating objects: 79, done.
remote: Counting objects: 100% (79/79), done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 79 (delta 15), reused 72 (delta 12), pack-reused 0
Receiving objects: 100% (79/79), 691.97 KiB | 117.00 KiB/s, done.
Resolving deltas: 100% (15/15), done.
版本與修改
版本回退
隨著在工作中對(duì)文件不停的修改寒跳,然后提交修改到版本庫(kù)中聘萨,版本庫(kù)會(huì)存在很多個(gè)commit
,每次提交生成一個(gè)童太,可以把每次階段性的修改放到一個(gè)commit
中米辐,如果出現(xiàn)錯(cuò)誤,就可以從最近的一個(gè)commit
恢復(fù)
通過(guò) git log
可以查看我們提交修改的歷史記錄(從近到遠(yuǎn))书释,加上--pretty=oneline
可以展示精簡(jiǎn)信息
歷時(shí)記錄信息中類似 1094adb...
的是commit id
(版本號(hào))
如果回退到上一個(gè)版本翘贮?
在Git中 HEAD
表示當(dāng)前版本,上一個(gè)版本就是HEAD^
爆惧,上上個(gè)版本就是HEAD^^
狸页,往回的版本比較多的時(shí)候?qū)懗?code>HEAD~100
使用git reset
命令 可以退回某一個(gè)版本
退回上一個(gè)版本:
$ git reset --hard HEAD^
退回上個(gè)之后還想重新回到最新的版本怎么辦?找到剛才的最后一次commit記錄中的commitid扯再,然后執(zhí)行
$ git reset --hard 1094a
1094a
代表的是最后一個(gè)版本的 commitid (不需要寫全芍耘,寫出前幾位就可以)
如果已經(jīng)找不到最后一個(gè)版本的commitid怎么辦?比如重啟了電腦
可以使用git reflog
命令
Git的版本回退速度很快熄阻,是因?yàn)镚it內(nèi)部有一個(gè)當(dāng)前版本的HEAD指針
區(qū)別:
- git log - 查看提交歷史 以便確定回退到哪個(gè)版本
- git reflog - 查看命令歷史 以便確定要回到未來(lái)的哪個(gè)版本
工作區(qū)和暫存區(qū)
工作區(qū)(Working Directory):電腦本地存放Git倉(cāng)庫(kù)的文件夾就是一個(gè)工作區(qū)</br></br>
版本庫(kù)(Repository):工作區(qū)內(nèi)有一個(gè)隱藏文件夾.git
這個(gè)文件夾不算工作區(qū)斋竞,而是Git的版本庫(kù)
</br>
版本庫(kù)中存放了很多東西,最重要的就是暫存區(qū)(stage秃殉,或者叫index)坝初,還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master
浸剩,以及master
的第一個(gè)指針HEAD
當(dāng)我們把文件添加到版本庫(kù)中時(shí),先是通過(guò)git add
將文件添加到暫存區(qū)鳄袍,然后用git commit
將當(dāng)前暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支乒省,一旦提交后,如果對(duì)工作區(qū)沒(méi)有做任何修改畦木,那么工作區(qū)就是干凈的
- git status 查看當(dāng)時(shí)工作區(qū)的狀態(tài)
管理修改
每次修改袖扛,如果不使用git add
將修改添加到暫存區(qū),那么commit
的時(shí)候就不會(huì)將這部分修改提交到版本庫(kù)十籍,所以Git跟蹤管理的是修改蛆封,而不是文件,這也正是它優(yōu)秀的地方
git diff到底比較的是那個(gè)兩個(gè)文件之間的差異勾栗。經(jīng)過(guò)在網(wǎng)上搜網(wǎng)惨篱,終于找到樂(lè)答案。
這里分為兩種情況围俘,一種是當(dāng)暫存區(qū)中有文件時(shí)砸讳,另一種是暫存區(qū)中沒(méi)有文件。
(1)當(dāng)暫存區(qū)中沒(méi)有文件時(shí)界牡,git diff比較的是簿寂,工作區(qū)中的文件與上次提交到版本庫(kù)中的文件。
(2)當(dāng)暫存區(qū)中有文件時(shí)宿亡,git diff則比較的是常遂,當(dāng)前工作區(qū)中的文件與暫存區(qū)中的文件。
而 git diff HEAD -- file挽荠,比較的是工作區(qū)中的文件與版本庫(kù)中文件的差異克胳。HEAD指向的是版本庫(kù)中的當(dāng)前版本,而file指的是當(dāng)前工作區(qū)中的文件圈匆。
補(bǔ)充:git diff命令比較的是工作目錄中當(dāng)前文件與暫存區(qū)快照之間的差異漠另,也就是修改之后還沒(méi)有暫存起來(lái)的變化內(nèi)容。
注意:git diff本身只顯示尚未暫存的改動(dòng)跃赚,而不是自上次提交以來(lái)所做的所有改動(dòng)笆搓。所以,有時(shí)候你一下子暫存了所有更新過(guò)的文件后,運(yùn)行g(shù)it diff后卻什么也沒(méi)有沸停,就是這個(gè)原因。
如果要查看已暫存的將要添加到下次提交里的內(nèi)容,可以使用git diff --cached或者git diff --staged秀存。
撤銷修改
如果對(duì)文件的修改還沒(méi)有git add
到暫存區(qū),可以使用git checkout --xxx
將修改撤銷幢尚,讓這個(gè)文件回到最近一次git commit
或者 git add
時(shí)的狀態(tài)瑰妄,--
很重要 如果沒(méi)有的話就變成了“切換到另一個(gè)分支”的命令
撤銷未加入暫存區(qū)的所有修改使用git checkout .
如果對(duì)某些修改已經(jīng)git add
到暫存區(qū)了,就需要使用git reset HEAD<file>
可以把暫存區(qū)的修改撤銷掉,使用git reset HEAD -- .
可以撤銷所有暫存區(qū)的修改
如果修改已經(jīng)commit摔竿,再想退回的話就需要使用上一章的版本退回方案來(lái)撤銷修改了面粮,如果修改不緊commit而且已經(jīng)push到遠(yuǎn)程倉(cāng)庫(kù) 那就沒(méi)辦法了
分支管理
分支可以將工作中的任務(wù)進(jìn)行更好地拆分,讓我們更好地兼顧不同的工作任務(wù)继低,避免不同任務(wù)之間互相影響進(jìn)度熬苍。
創(chuàng)建新分支(例如dev)并切換到這個(gè)分支
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout
加上-b
表示創(chuàng)建新分支并切換,相當(dāng)于兩條命令
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
使用git branch
命令查看當(dāng)前分支
$ git branch
* dev
master
當(dāng)我們?cè)?code>dev上完成了某一階段的工作后袁翁,就可以切換回master
分支柴底,并把dev
上修改的內(nèi)容合并進(jìn)master
分支
$ git merge dev
此時(shí)就可以刪除dev
分支了
$ git branch -d dev
解決沖突
當(dāng)兩個(gè)不同的分支對(duì)同一個(gè)文件作出修改后,再合并其中一個(gè)分支到另一個(gè)分支粱胜,就有可能出現(xiàn)沖突柄驻,比如
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
此時(shí)需要根據(jù)提示找到有沖突的文件(可以使用git status
查看),沖突解決后再次提交就徹底完成了合并
使用帶參數(shù)的git log
可以看到分支的合并情況
$ git log --graph --pretty=oneline --abbrev-commit
使用git log --graph
可以看到分支合并圖
分支策略
合并分支時(shí)焙压,加上--no-ff
參數(shù)就可以用普通模式合并鸿脓,合并后的歷史有分支,能看出來(lái)曾經(jīng)做過(guò)合并涯曲,而fast forward
合并就看不出來(lái)曾經(jīng)做過(guò)合并野哭。
使用--no-ff
合并分支時(shí)候會(huì)生成一個(gè)新的commit,所以要加上-m
添加commit說(shuō)明
$ git merge --no-ff -m "merge with no-ff" dev
在實(shí)際開(kāi)發(fā)中幻件,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:首先虐拓,master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來(lái)發(fā)布新版本傲武,平時(shí)不能在上面干活蓉驹;那在哪干活呢?干活都在dev分支上揪利,也就是說(shuō)态兴,dev分支是不穩(wěn)定的,到某個(gè)時(shí)候疟位,比如1.0版本發(fā)布時(shí)瞻润,再把dev分支合并到master上,在master分支發(fā)布1.0版本甜刻;你和你的小伙伴們每個(gè)人都在dev分支上干活绍撞,每個(gè)人都有自己的分支,時(shí)不時(shí)地往dev分支上合并就可以了得院。
Bug分支與儲(chǔ)存功能
如果在開(kāi)發(fā)過(guò)程中需要切換到另一個(gè)分支去做一些任務(wù)(比如一個(gè)軟件的線上版本出現(xiàn)了問(wèn)題傻铣,需要新建一個(gè)fix分支去修復(fù)這些問(wèn)題,優(yōu)先級(jí)比較高)祥绞,但是當(dāng)前的分支任務(wù)還未完成非洲,沒(méi)辦法提交鸭限,就可以提供Git提供的stash
功能,可以把當(dāng)前工作“儲(chǔ)藏”起來(lái)两踏,等f(wàn)ix分支的工作完成后再切換回來(lái)繼續(xù)工作
$ git stash
Saved working directory and index state WIP on master: 8b63070 merge
此時(shí)用git status
查看工作區(qū)败京,是干凈的
此時(shí)我們可以切換到其他分支去完成修復(fù)工作,完成后再切換回剛才正在開(kāi)發(fā)的分支梦染,利用git stash list
命令查看
$ git status
stash@{0}: WIP on master: 8b63070 merge
說(shuō)明剛才存儲(chǔ)的工作內(nèi)容還在赡麦,需要恢復(fù)一下:
一是用git stash apply
恢復(fù),但是恢復(fù)后剛才存儲(chǔ)的內(nèi)容不刪除帕识,需要用git stash drop
來(lái)刪除
另一種是用git stash pop
可以在恢復(fù)的同時(shí)把剛才儲(chǔ)存的內(nèi)容刪除
$ git stash pop
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (31fe0b99cb0672f72bd995c56806ce464b37491c)
如果在開(kāi)發(fā)過(guò)程中產(chǎn)生了多個(gè)“儲(chǔ)存”隧甚,在恢復(fù)的時(shí)候,可以先利用git stash list
查看儲(chǔ)存列表渡冻,然后利用git stash apply stash@{0}
恢復(fù)某一個(gè)儲(chǔ)存戚扳,恢復(fù)后利用git stash drop stash@{0}
來(lái)將剛才恢復(fù)這個(gè)儲(chǔ)存刪除
$ git stash list
stash@{0}: WIP on master: 2f7013a 0
stash@{1}: WIP on master: 2f7013a 0
$ git stash apply stash@{0}
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
$ git stash drop stash@{0}
Dropped stash@{0} (a18304ccf7ba4530441db39ab448d9494ad89d64)
由于現(xiàn)在的分支是從master分支上分出來(lái)的,那master分支上的bug在當(dāng)前的分支也會(huì)存在族吻,那我們?cè)鯓涌焖俚卦诋?dāng)前的分支也將這個(gè)bug也修復(fù)呢帽借?
我們只需要將修復(fù)分支的那次提交復(fù)制到當(dāng)前的分支就可以(不需要將整個(gè)master分支合并過(guò)來(lái))
$ git cherry-pick 53f63c9
[dev1 dbce2f8] fix
Date: Fri Aug 16 11:38:40 2019 +0800
1 file changed, 2 insertions(+)
此時(shí)Git會(huì)自動(dòng)給dev1做一次提交,雖然跟53f63c9
的改動(dòng)相同超歌,但他們屬于兩個(gè)不同的commit
Feature分支
為軟件添加一個(gè)新功能可以新建一個(gè)feature分支砍艾,來(lái)實(shí)現(xiàn)一些實(shí)驗(yàn)性的代碼,開(kāi)發(fā)完成后合并到主分支并刪除feature分支
git checkout -b branch_name
正常情況下巍举,功能性分支開(kāi)發(fā)完成后脆荷,就可以合并進(jìn)開(kāi)發(fā)分支了,合并完成沒(méi)有后就可以刪除剛才的分支
但如果我們需求突然有變動(dòng)懊悯,這個(gè)功能不要了蜓谋,而且要永久性刪除
git branch -d branch_name
此時(shí),Git會(huì)提示我們銷毀失敗炭分,因?yàn)檫@個(gè)分支還沒(méi)有被合并桃焕,如果刪除,將丟失掉修改捧毛,如果要強(qiáng)行刪除观堂,需要使用大寫的-D
參數(shù)。呀忧。
it branch -D branch_name
多人協(xié)作
查看遠(yuǎn)程倉(cāng)庫(kù)的信息可以使用
git remote
或使用git remote -v
顯示更詳細(xì)的分支
推送分支师痕,就是把該分支上所有的的本地提交推送到遠(yuǎn)程倉(cāng)庫(kù),比如:
git push origin dev
理論上而账,master
是主分支胰坟,要時(shí)刻與遠(yuǎn)程同步,dev
是主開(kāi)發(fā)分支福扬,所有成員都要在上面工作腕铸,所以也需要與遠(yuǎn)程同步;
bug分支只需要在本地修復(fù)bug铛碑,就沒(méi)必要推送到遠(yuǎn)端了狠裹,而feature分支要看你的伙伴是否需要在這個(gè)分支上開(kāi)發(fā),否則可以不用推送
如果你的同伴對(duì)某個(gè)分支做了修改并推送到了遠(yuǎn)端汽烦,此時(shí)你也做了修改涛菠,是無(wú)法直接推送的,需要先git pull
將遠(yuǎn)端的內(nèi)容更新到本地并合并撇吞,然后再推送俗冻。
如果本地的分支與遠(yuǎn)程的分支沒(méi)有鏈接的話,需要用 git branch --set-upstream-to=origin/branch_name branch_name
建立分支的關(guān)聯(lián)
變基
不同的人開(kāi)發(fā)同一個(gè)分支會(huì)導(dǎo)致提交歷史分叉牍颈,這時(shí)候rebase就派上了用場(chǎng)
git rebase
原本分叉的分支會(huì)變成一條直線(但是本地的分叉提交會(huì)被修改)
標(biāo)簽管理
在發(fā)布一個(gè)版本時(shí)迄薄,我們通常會(huì)在版本庫(kù)中打一個(gè)標(biāo)簽(tag),這樣就可以確定這個(gè)版本的時(shí)刻煮岁,標(biāo)簽就是這個(gè)版本的快照讥蔽。但本質(zhì)上他是指向某個(gè)commit的指針,相對(duì)于commitid画机,它的可讀性更好
使用git tag tag_name
就可以打一個(gè)標(biāo)簽冶伞。
使用git tag
可以查看所有標(biāo)簽
如果要給版本庫(kù)以前的某個(gè)時(shí)刻打標(biāo)簽可以使用git tag tag_name commitid
注意:標(biāo)簽不是按時(shí)間順序列出的,而是按字母排列的步氏,使用git show tag_name
可以查看標(biāo)簽信息
還可以使用git tag -a tag_name -m'message' commitid
創(chuàng)建帶有說(shuō)明的標(biāo)簽响禽,-a 用來(lái)指定標(biāo)簽名 -m用來(lái)添加說(shuō)明
刪除本地標(biāo)簽:git tag -d tag_name
推送某個(gè)標(biāo)簽到遠(yuǎn)端:git push origin tag_name
或使用git push origin --tags
推送所有本地標(biāo)簽
刪除遠(yuǎn)端標(biāo)簽:git push origin:refs/tags/tag_name
使用gitee和github
如果本地已有一個(gè)git倉(cāng)庫(kù),可以在碼云或者github上新建一個(gè)遠(yuǎn)程倉(cāng)庫(kù)荚醒,然后將本地的倉(cāng)庫(kù)和遠(yuǎn)程的那個(gè)倉(cāng)庫(kù)關(guān)聯(lián)起來(lái)
git remote add origin git@gitee.com:zhenguanqing/LearnGit.git
還可以使同一個(gè)本地倉(cāng)庫(kù)關(guān)聯(lián)兩個(gè)不同的遠(yuǎn)程倉(cāng)庫(kù)
git remote add origin git@github.com:zhenguanqing/LearnGit.git
此時(shí)這個(gè)倉(cāng)庫(kù)就關(guān)聯(lián)了兩個(gè)倉(cāng)庫(kù)芋类,使用git remote -v
查看遠(yuǎn)程倉(cāng)庫(kù)信息:
gitee git@gitee.com:zhenguanqing/LearnGit.git (fetch)
gitee git@gitee.com:zhenguanqing/LearnGit.git (push)
github git@github.com:zhenguanqing/LearnGit.git (fetch)
github git@github.com:zhenguanqing/LearnGit.git (push)
此時(shí)如果需要推送改動(dòng)需要指定往哪個(gè)遠(yuǎn)程倉(cāng)庫(kù)推送,比如
git push origin master
git push github master
解決failed to push some refs to git
原因可能是遠(yuǎn)程倉(cāng)庫(kù)中的內(nèi)容沒(méi)有更新到本地
可以使用git pull --rebase origin master
然后再git push origin maseter
自定義Git
忽略特殊文件
在工作過(guò)程中有一些文件和內(nèi)容時(shí)沒(méi)有必要或者不能推送到遠(yuǎn)端的界阁,比如機(jī)密文件梗肝、操作系統(tǒng)自動(dòng)生成的文件、編譯產(chǎn)生的文件等等铺董,我們只需要在Git工作區(qū)的根目錄下創(chuàng)建一個(gè).gitignore
文件巫击,然后把需要忽略的文件名稱填進(jìn)去,Git就會(huì)自動(dòng)忽略這些文件
如果有時(shí)候我們想添加一個(gè)文件卻發(fā)現(xiàn)添加不了精续,可能是這個(gè)文件被.gitignore
忽略了坝锰,此時(shí)我們可以用-f
強(qiáng)制添加到Git:
git add -f README.md
如果你不想要這個(gè)規(guī)則了,可以使用git check-ignore
檢查到底是哪一行規(guī)則忽略了這個(gè)文件
git check-ignore -v README.md
配置別名
可以使用git config --global alias.x xxx
為Git命令配置別名
例如
git config --global alias.st status
之后查看狀態(tài)的命令就可以用
git st
等同于
git status
配置文件
配置Git的時(shí)候 --global
是針對(duì)當(dāng)前的用戶起作用重付,如果不加顷级,就是只針對(duì)當(dāng)前的倉(cāng)庫(kù)
Git的配置文件放在.git/config
文件中