Git入門

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文件中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市确垫,隨后出現(xiàn)的幾起案子弓颈,更是在濱河造成了極大的恐慌帽芽,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翔冀,死亡現(xiàn)場(chǎng)離奇詭異导街,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)纤子,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門搬瑰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人控硼,你說(shuō)我怎么就攤上這事泽论。” “怎么了卡乾?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵翼悴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我幔妨,道長(zhǎng)抄瓦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任陶冷,我火速辦了婚禮钙姊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘埂伦。我一直安慰自己煞额,他們只是感情好沾谜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布膊毁。 她就那樣靜靜地躺著,像睡著了一般基跑。 火紅的嫁衣襯著肌膚如雪婚温。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天媳否,我揣著相機(jī)與錄音栅螟,去河邊找鬼。 笑死篱竭,一個(gè)胖子當(dāng)著我的面吹牛力图,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掺逼,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吃媒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赘那,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刑桑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后募舟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體祠斧,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年胃珍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梁肿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜓陌。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡觅彰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钮热,到底是詐尸還是另有隱情填抬,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布隧期,位于F島的核電站飒责,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仆潮。R本人自食惡果不足惜宏蛉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望性置。 院中可真熱鬧拾并,春花似錦、人聲如沸鹏浅。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)隐砸。三九已至之碗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間季希,已是汗流浹背褪那。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留式塌,地道東北人武通。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像珊搀,于是被迫代替她去往敵國(guó)和親冶忱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345