使用者設定
初始化倉庫
把檔案添加到倉庫
把檔案送出到倉庫
初始化一個Git倉庫,使用git init指令。
添加檔案到Git倉庫,分兩步:
第一步,使用指令git add ,注意,可反複多次使用,添加多個檔案;
第二步,使用指令git commit,完成。
運作git status指令看看結果
但如果能看看具體修改了什麼内容
要随時掌握工作區的狀态,使用git status指令。
如果git status告訴你有檔案被修改過,用git diff可以檢視修改内容
版本控制系統肯定有某個指令可以告訴我們曆史記錄,在Git中,我們用git log指令檢視
首先,Git必須知道目前版本是哪個版本,在Git中,用HEAD表示目前版本,也就是最新的送出,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,是以寫成HEAD~100.
Git提供了一個指令git reflog用來檢視曆史
HEAD指向的版本就是目前版本,是以,Git允許我們在版本的曆史之間穿梭,使用指令git reset --hard commit_id。
穿梭前,用git log可以檢視送出曆史,以便确定要回退到哪個版本。
要重返未來,用git reflog檢視指令曆史,以便确定要回到未來的哪個版本。
工作區(Working Directory):就是你在電腦裡能看到的目錄,比如我的learngit檔案夾就是一個工作區。
版本庫(Repository):工作區有一個隐藏目錄“.git”,這個不算工作區,而是Git的版本庫。
Git的版本庫裡存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動建立的第一個分支master,以及指向master的一個指針叫HEAD。
前面講了我們把檔案往Git版本庫裡添加的時候,是分兩步執行的:
第一步是用“git add”把檔案添加進去,實際上就是把檔案修改添加到暫存區;
第二步是用“git commit”送出更改,實際上就是把暫存區的所有内容送出到目前分支。
git checkout -- file可以丢棄工作區的修改
git checkout -- file指令中的“--”很重要,沒有“--”,就變成了“建立一個新分支”的指令.
用指令git reset HEAD file可以把暫存區的修改撤銷掉(unstage),重新放回工作區
git reset指令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。
場景1:當你改亂了工作區某個檔案的内容,想直接丢棄工作區的修改時,用指令git checkout -- file。
場景2:當你不但改亂了工作區某個檔案的内容,還添加到了暫存區時,想丢棄修改,分兩步,第一步用指令git reset HEAD file,就回到了場景1,第二步按場景1操作。
确實要從版本庫中删除該檔案,那就用指令git rm删掉,并且commit
另一種情況是删錯了,因為版本庫裡還有呢,是以可以很輕松地把誤删的檔案恢複到最新版本
git checkout其實是用版本庫裡的版本替換工作區的版本,無論工作區是修改還是删除,都可以“一鍵還原”。
指令git rm用于删除一個檔案。如果一個檔案已經被送出到版本庫,那麼你永遠不用擔心誤删,但是要小心,你隻能恢複檔案到最新版本,你會丢失最近一次送出後你修改的内容。
要關聯一個遠端庫,使用指令git remote add origin git@server-name:path/repo-name.git;
關聯後,使用指令git push -u origin master第一次推送master分支的所有内容;
此後,每次本地送出後,隻要有必要,就可以使用指令git push origin master推送最新修改;
用指令git clone克隆一個本地庫
檢視分支:git branch
建立分支:git branch name
切換分支:git checkout name
建立+切換分支:git checkout -b name
合并某分支到目前分支:git merge name
删除分支:git branch -d name
在 目前分支下,要把dev分支的内容合并
當Git無法自動合并分支時,就必須首先解決沖突。解決沖突後,再送出,合并完成。
用git log --graph指令可以看到分支合并圖。
在實際開發中,我們應該按照幾個基本原則進行分支管理:
首先,master分支應該是非常穩定的,也就是僅用來釋出新版本,平時不能在上面幹活;
那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本釋出時,再把dev分支合并到master上,在master分支釋出1.0版本;
你和你的小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。
Git還提供了一個stash功能,可以把目前工作現場“儲藏”起來,等以後恢複現場後繼續工作:
現在,用git status檢視工作區,就是幹淨的(除非有沒有被Git管理的檔案),是以可以放心地建立分支來修複bug。
首先确定要在哪個分支上修複bug,假定需要在master分支上修複,就從master建立臨時分支:
檢視存儲的工作 用git stash list
工作現場還在,Git把stash内容存在某個地方了,但是需要恢複一下,有兩個辦法:
一是用git stash apply恢複,但是恢複後,stash内容并不删除,你需要用git stash drop來删除;
另一種方式是用git stash pop,恢複的同時把stash内容也删了:
修複bug時,我們會通過建立新的bug分支進行修複,然後合并,最後删除;
當手頭工作沒有完成時,先把工作現場git stash一下,然後去修複bug,修複後,再git stash pop,回到工作現場.
如果要丢棄一個沒有被合并過的分支,可以通過git branch -D name強行删除。
當你從遠端倉庫克隆時,實際上Git自動把本地的master分支和遠端的master分支對應起來了,并且,遠端倉庫的預設名稱是origin。
要檢視遠端庫的資訊,用git remote或者用git remote -v顯示更詳細的資訊:
推送分支,就是把該分支上的所有本地送出推送到遠端庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠端庫對應的遠端分支上.
但是,并不是一定要把本地分支往遠端推送,那麼,哪些分支需要推送,哪些不需要呢?
master分支是主分支,是以要時刻與遠端同步;
dev分支是開發分支,團隊所有成員都需要在上面工作,是以也需要與遠端同步;
bug分支隻用于在本地修複bug,就沒必要推到遠端了,除非老闆要看看你每周到底修複了幾個bug;
feature分支是否推到遠端,取決于你是否和你的小夥伴合作在上面開發。
總之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,視你的心情而定!
多人協作時,大家都會往master和dev分支上推送各自的修改。
現在,模拟一個你的小夥伴,可以在另一台電腦(注意要把SSH Key添加到GitHub)或者同一台電腦的另一個目錄下克隆:
指定本地dev分支與遠端origin/dev分支的連結
是以,多人協作的工作模式通常是這樣:
首先,可以試圖用git push origin branch-name推送自己的修改;
如果推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合并;
如果合并有沖突,則解決沖突,并在本地送出;
沒有沖突或者解決掉沖突後,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,則說明本地分支和遠端分支的連結關系沒有建立,用指令git branch --set-upstream branch-name origin/branch-name。
這就是多人協作的工作模式,一旦熟悉了,就非常簡單。
檢視遠端庫資訊,使用git remote -v;
本地建立的分支如果不推送到遠端,對其他人就是不可見的;
從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠端的新送出;
在本地建立和遠端分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠端分支的名稱最好一緻;
建立本地分支和遠端分支的關聯,使用git branch --set-upstream branch-name origin/branch-name;
從遠端抓取分支,使用git pull,如果有沖突,要先處理沖突。
指令git tag name就可以打一個新标簽,可以用指令git tag檢視所有标簽
<a></a>
用git show tagname檢視标簽資訊
指令git tag name用于建立一個标簽,預設為HEAD,也可以指定一個commit id;
-a tagname -m "blablabla..."可以指定标簽資訊;
-s tagname -m "blablabla..."可以用PGP簽名标簽;
指令git tag可以檢視所有标簽;
推送某個标簽到遠端,使用指令git push origin tagname,或者,一次性推送全部尚未推送到遠端的本地标簽
删除标簽
分兩步,1、删除本地;2、删除遠端。
指令git push origin tagname可以推送一個本地标簽;
指令git push origin --tags可以推送全部未推送過的本地标簽;
指令git tag -d tagname可以删除一個本地标簽;
指令git push origin :refs/tags/tagname可以删除一個遠端标簽。
ignore 檔案
忽略檔案的原則是:
忽略作業系統自動生成的檔案,比如縮略圖等;
忽略編譯生成的中間檔案、可執行檔案等,也就是如果一個檔案是通過另一個檔案自動生成的,那自動生成的檔案就沒必要放進版本庫,比如Java編譯産生的.class檔案;
忽略你自己的帶有敏感資訊的配置檔案,比如存放密碼的配置檔案。
配置别名
如果敲git st就表示git status
本文轉自NewPanderKing51CTO部落格,原文連結: http://www.cnblogs.com/newpanderking/p/4005698.html,如需轉載請自行聯系原作者