0、
整體認識:工作區(用來修改檔案的地方),暫存區(add之後存放檔案的地方),倉庫(commit之後存放檔案的地方),遠端倉庫(push之後所有人都能看到的地方)
gti 常用指令:

————————————————————————————————————————————————————————————————————————————————————
——————————————————————————————————————————————————————————————————————————————
1、
Git就是一個版本控制系統,屬于分布式的版本控制系統。與之對應的有內建式的版本控制系統,比如CVS 、SVN等內建式的版本控制系統。內建式的版本管理系統指的是有一個中央的伺服器用來存放版本庫的,而當我們需要修改的時候,在從中央管理器裡面取得最新的版本,修改完之後再把修改的後的版本放到中央股那裡其中。內建式的缺點:必須要聯網才能工作。分布式的管理系統沒有所謂的中央管理器,每個人的電腦裡面都有一個完整的版本庫,隻需要在本地就能工作。缺點:可能造成push沖突。
2、
Git是由Linux系統的創始人開發的一套開源的版本控制系統,用來管理源碼和版本的,Git是用C語言編寫。
3、安裝Git
在Linux上安裝:apt install git(Ubuntu),yum install git(紅帽)
Windows上安裝:在官網下載下傳安裝即可。
安裝完之後:在指令行執行 git config --global user.name "這裡輸入你的名字"
git config --global user.email "這裡輸入你的郵箱"
輸入這兩個的指令的意思就是你以後需要送出的修改都是以這個身份來送出的,也就是能然我們知道是誰修改了源碼。
4、
版本庫(repository):又名倉庫,就是一個檔案夾,不過不是一個普通的檔案夾,是一個能被git管理起來的倉庫,也就是所你多這個檔案家裡的所有的修改Git都能夠追蹤到,這樣就能還原我們某個時刻的修改了。
建立一個版本庫(本地建立):選擇一個空的檔案夾,在該檔案夾下建立版本庫(倉庫),使用gti init指令就能建立一個空版本庫了。建立完之後就會有一個隐藏的.git檔案,該檔案就是用來追蹤管理版本庫的。這是我們就能在該檔案夾下添加東西了,但是git隻能跟蹤文本問價的修改,可以具體的追蹤到我們修改了哪一行的哪一個字元,比如txt檔案,網頁檔案,程式的源代碼等等。但是像二進制檔案,雖然也能管理,但是無法追蹤到檔案的具體變化,隻能知道檔案被修改過了,不知道修改了哪裡。注意:Microsoft的word檔案也是二進制的檔案。還有就是Windows自帶的記事本會有一些問題,不要使用。
5、
我們寫好一個檔案之後,一定要将檔案放到我們建立的倉庫裡面,然後使用指令:git add 檔案名,這樣我們就把我們寫的檔案告訴加入到倉庫了,git就能追蹤到倉庫檔案的變化了。災後在使用指令:git commit -m "這裡寫送出檔案的說明",這時就把我們修改的檔案放入到本地的倉庫裡面了。為什麼add與commit連個指令呢:因為我們每一次可以修改不同的檔案,而commit是将你所有的修改都送出到本地的倉庫裡面去。
6、
git status指令用來檢視目前倉庫的狀态,那些檔案被修改了,那些檔案被修改還沒有送出到倉庫的等等。git diff指令可以用來檢視具體檔案修改了那些地方。
7、
回退版本指令:git reset --hard HEAD^,表示回退到上一個版本(也就是上一個commit的地方)。
使用reflog記錄你的每一條指令,使用git reflog檢視指令進而檢視前面的版本号,就能前進版本了。
回退之後再想回來:git reset --hard 前進的版本号
當我們不斷的對檔案進行修改送出修改送出。。。一旦我們發現我們将檔案修改錯了或者是誤删了一些檔案的時候,這時我們就可以從commit那裡恢複,也就是說可以恢複到一個commit的地方,(其實就好比玩遊戲存檔一樣)。我們每一次commit都是一個版本,git都會給我們記錄下來放在log裡面,是以說當我們修改檔案錯誤或者誤删檔案等都可以回退到我們前面任意一個commit的地方,使用git log就能檢視我們每次commit的log了。在git中使用HEAD表示目前版本,HEAD^表示上一個版本HEAD^^表示上兩個版本或者使用HEAD~數字表示回退到這個數字的這個版本。
8、
工作區:就是我們在本地修改檔案的地方,也就是我們能看到的檔案的地方
版本庫(裡面的暫存區):也就是在工作區李米娜有一個.git的隐藏目錄,他不是一個工作區,而是git的版本庫,裡面就是有暫存區的,當我們用git add . 指令時git就會把檔案暫存到暫存區了,之後我們使用git commit -m ‘ ’ 就會把我們暫存區的所有的内容都放到我們目前的分支裡面。一旦我們送出到倉庫,隻要我們沒有對工作區裡面的檔案進行修改那麼暫存區就是幹淨的。
9、
撤銷修改:當我們對檔案進行了修改之後,發現我們修改錯了,但是我們已經add到暫存區了,這時候我們就需要用到撤銷修改了。這裡的修改分為兩種情況:1 我們的修改還沒有放到暫存區,這是我們直接使用撤銷就可以了。2 時我們的修改已經了暫存區了,這是我們需要用到git reset HEAD 檔案名 ,就可以将暫存區的檔案撤銷掉。重新放到工作區。總結:使用git checkout 檔案名,撤銷工作區的修改;使用git reset HEAD 檔案名,将暫存區的檔案撤銷到工作區在用git checkout 檔案名撤銷;當我們送出到了倉庫了就使用版本回退的方法撤銷即可。一共三種撤銷修改。
10、
遠端倉庫:
找一個伺服器做倉庫,其他人都可以從倉庫裡面擷取版本到本地,進行修改後在把修改後的版本同步到伺服器上。我們可以在gitee上添加一個遠端的倉庫,再把它clone到我們本地的機器上就可以。我們使用git clone 倉庫的位址,就可以将将倉庫clone到我們本地了。修改完成之後在使用git push 将我們修改之後的檔案上傳到遠端倉庫就可以了;當我們第二次或者以後需要從遠端倉庫同步我們的檔案到本地時用 git pull 指令進行遠端倉庫同步到本地即可。
11、
分支管理:就好比分身術一樣,同時可以做多個不同的事。比如多個人協同一起開發一個項目,你負責的部分做了一部分,家沒有完全做完,這是如果你将你已完成的部分同步到遠端倉庫,别人再去同步時就會有你上傳了但是還沒有完成的部分,就可能會導緻别人的工作無法進行,是以就有了分支的概念。你可以建立一個屬于你的分支,然後你可以将你的工作放到你自己的分支裡面,别人時不會區同步你的分支的。當你們的所有的工作都完成的時候,就可以把你們的分支同步到主分支裡面就可以了。
12、
建立與合并分支:當我們每次commit的時候,git就會将我們的commit串成一個時間線,這條時間線就是一個分支。一開始預設時主分支,當我們建立了一個分支的時候就會有一個指針指向這個分支,随着我們送出的次數越來越多分支的時間線就越來越長了。比如我們建立了一個master01的分支,這是就有一個指針指向這個分支。當我們完成了工作需要合并的時候,合并完成就可以将master01的分支删除即可。
建立并切換一個分支:git branch 分支的名字,git checkout 分支的名字或者git switch 分支的名字(新版的指令)。
合并并删除一個分支:git merge 需要合并的分支名 ,表示将該分支合并到目前分支。git branch -b 分支名。
13、
解決沖突:當兩個分支同時修改了同一個檔案的同一個地方,然後亮兩個支送出的時候就會發生沖突,這是git就會告訴你那些檔案的那些地方發生了沖突,必須要手動的解決沖突才能進行送出。這是我們打開産生沖突的檔案檢視。和另一個分支的工作者協商解決沖突,看需要删除或者保留亦或者都需要保留修改。
14、
暫存工作狀态去别的分支操作:當我們在某個分支下工作的時候,然後需要去修改另外的
主分支的一個檔案或者bug時,這時我們可以儲存我們分支的進度。再去建立一個新的分支來修改bug,當我們修改完bug的時候仔回到我們工作的分支。使用指令git stash 儲藏我們目前的分支的進度,就可以再去其他的分支建立一個分支在進行去改bug等等操作。
15、
當我們在新的分支上進行檔案修改的時候,在我們還沒有送出該分支的修改的時候,我們不再需要這個分支所作的修改,也就是需要删除這個分支,該分支所做的修改不再需要了,我們使用git branch -D 分支的名字,這樣就可以強行删除這個分區了。
16、
當我們使用git clone遠端倉庫實際上就把本地的master分支和遠端的master分支對應起來了也就是此時我們就時master分支。我們可以通過git remote來檢視遠端倉庫的資訊,遠端倉庫的預設名稱時origin。當我們push我們的分支的時候我們可以指定本地的分支,這樣就可以把我們的分支push到遠端的分支上,使用git push origin master,表示以master分支進行push。一般master時主分支要時刻與遠端同步,dev時開發分支團隊所有人都在上面工作也需要同步,bug分區用來修改bug的,不用時刻同步遠端,feature分區的同步取決于團隊的發開進度。
17、
标簽管理:其實标簽和commit差不多,也就是給commit起一個别名。當我們commit一個版本的時候雜合這個版本做個标簽(tag),那麼這個标簽就表示這個版本。當我們需要那個版本的時候直接去相應的标簽的地方取出來就行了。
建立标簽:使用git tag 标簽的名字,這樣就給最新送出的commit地位打上了标簽。我們也可以找到曆史的commit id 然後再打上标簽gti tag 标簽名字 commit id。
檢視标簽:git tag,檢視标簽的資訊:git show 标簽名字
删除标簽:git tag -d 标簽名字
push标簽到遠端:git push origin 标簽名字
如果我們已經将标簽推送到遠端,但是需要删除标簽,這時我們需要先将本地的标簽删掉,然後再删除遠端的,删除遠端的d指令:git push origin :/refs/tags/标簽名字。
18、
忽略某些檔案的push:在我們的工作區的根目錄下有一個隐藏的檔案夾.gitignore它裡面就記錄了我們那些檔案不需要push,也就是git會自動忽略,gitignore檔案裡面的檔案名的檔案。
19、
給指令取别名:git config --global alias.别名 指令。他就表示将該條指令以别名來進行,下次我們就可以使用别名來代替這條指令。