一、獲取 Git 倉(cāng)庫(kù)
有兩種方式可以獲取 git 倉(cāng)庫(kù),一種是在現(xiàn)有的項(xiàng)目或者目錄下將所有文件導(dǎo)入到 git 中,另一種是從服務(wù)器上克隆一個(gè)現(xiàn)有的 git 倉(cāng)庫(kù)。
1、第一種方式
git init
下面是實(shí)際的操作:

但是這樣只是建立了一個(gè)本地的倉(cāng)庫(kù),現(xiàn)在要將建立一個(gè)遠(yuǎn)程的倉(cāng)庫(kù),并將本地和遠(yuǎn)程的倉(cāng)庫(kù)連接起來(lái)。

git remote add origin url
git remote -v
git push -u origin master

此時(shí)刷新 github 頁(yè)面可以看到已將本地和遠(yuǎn)程倉(cāng)庫(kù)連接起來(lái),還可以看到有一次 commit 以及 push 到遠(yuǎn)程的文件:

第一種方式適用于你想要用 git 倉(cāng)庫(kù)來(lái)管理你本地的項(xiàng)目或者文件。
2、第二種方式
git clone url
復(fù)制已有的 git 倉(cāng)庫(kù)的鏈接,使用 git clone url 命令將遠(yuǎn)程倉(cāng)庫(kù)克隆到本地。

第二種方式適用于你想要獲取一個(gè)已經(jīng)存在的 git 倉(cāng)庫(kù)的拷貝。
二、上傳本地修改
git add file
添加所有修改可以用 git add .
git commit -m "commit description"
git push
完整的寫法:git push remoteName branchName
git push origin master
可以使用 git status 來(lái)查看狀態(tài)
修改之前 file.txt 文件的內(nèi)容:

進(jìn)行的操作:

修改之后 file.txt 文件的內(nèi)容:

三、查看 commit 記錄
git log
github 中顯示的 commit 記錄:

使用 git log 命令:

commit 后面跟著的是 commit id,可以用于版本回退。
四、版本回退
回退到上 n 個(gè)版本:git reset --hard HEAD~n
回退到某個(gè)指定的版本:git reset --hard commit id

五、解決沖突
git merge
一般項(xiàng)目會(huì)由多人合作,也就會(huì)出現(xiàn)沖突的情況。一般沖突分為兩種,一種是 A 對(duì) a 文件修改,B 對(duì) b 文件修改,另一種是 A 和 B 都對(duì) file 文件進(jìn)行修改。
1、A 對(duì) a 文件修改,B 對(duì) b 文件修改
遠(yuǎn)程模擬 A 對(duì) a 文件進(jìn)行修改,A 新增文件 a 且輸入一些內(nèi)容,實(shí)際情況下最好不要在 github 上直接進(jìn)行操作:

本地新建文件 b 并輸入內(nèi)容提交:
在進(jìn)行完 add 和 commit 操作之后,如果直接進(jìn)行 push 操作是會(huì)報(bào)錯(cuò),提示你需要先 git pull,將遠(yuǎn)程文件先拉取下來(lái),然后才能進(jìn)行 push 操作。

git pull 之后會(huì)自動(dòng)的進(jìn)行 merge:

2、A 和 B 都對(duì) file 文件進(jìn)行修改
還是在 github 上模擬 A 對(duì)文件 file 的修改:

在本地 B 對(duì) file 文件進(jìn)行修改:
同樣的在 push 操作之前要先進(jìn)行 pull 操作,但是這個(gè)時(shí)候不會(huì)自動(dòng)的解決沖突,而是要手動(dòng)的解決沖突,解決沖突完之后才能 push 到遠(yuǎn)程。



解決沖突完之后重新 commit,然后 push 到遠(yuǎn)程:

六、分支的使用
1、建立分支
新建分支:git branch branchName
切換分支:git checkout branchName
新建分支并切換到該分支:git checkout -b branchName
查看當(dāng)前所有分支及當(dāng)前所在的分支:git branch

2、暫存
保存當(dāng)前進(jìn)度:git stash
顯示保存進(jìn)度的列表:git stash list
恢復(fù)最新的進(jìn)度到工作區(qū):git stash pop
建立了分支之后,我們?cè)谝粋€(gè)分支上進(jìn)行工作,工作到一半的時(shí)候有人反饋了一個(gè)問題需要你立刻解決,但是新的工作進(jìn)行到一半也不方便 commit,此時(shí)可以使用 git stash 命令將當(dāng)前分支的工作暫時(shí)保存起來(lái),等到解決完其他的問題之后再切回來(lái)繼續(xù)進(jìn)行工作。
- 首先我們切換到 first 分支進(jìn)行一些操作:

我們新建一個(gè) stash.txt 的文件,并寫入了一些內(nèi)容,但是此時(shí) master 分支上需要我們?nèi)プ鲆恍┕ぷ鳎覀兛梢詫?first 分支當(dāng)前的工作暫存起來(lái),使用 git status 命令可以看到,工作樹是干凈的。
- 然后我們切換到 master 分支上進(jìn)行工作:

- 最后我們切回 first 分支,恢復(fù)最新的進(jìn)度到工作區(qū),繼續(xù)進(jìn)行原來(lái)的工作:

3、合并分支
git merge branchName
git rebase branchName
-
git merge
切回到 master 分支上,將 first 分支合并到 master 上:
git merge 合并分支
使用 git log 查看 commit 記錄,會(huì)發(fā)現(xiàn)有一條很不規(guī)范的 commit 記錄:

但是同時(shí) git merge 保存了詳細(xì)的合并信息,當(dāng)需要保留詳細(xì)的合并信息的時(shí)候建議使用 git merge。
-
git rebase
然后我們分別再在兩個(gè)分支上進(jìn)行修改,使用 git rebase 進(jìn)行合并,查看 commit 的記錄:
git rebase 合并分支
可以看到,使用 git rebase 合并分支不會(huì)出現(xiàn)不規(guī)范的 commit 記錄,但是不會(huì)保留詳細(xì)的 merge 信息,當(dāng)很多的提交信息沒有必要時(shí),可以嘗試 git rebase。
4、刪除分支
git branch -d branchName
分支合并到 master 分支上之后,它的作用也就達(dá)到了,我們可以將它刪掉,不然會(huì)殘留許多無(wú)用的分支。

七、不需要追蹤某些文件
1、永久不追蹤
修改 .gitignore 文件,在 git 中如果想忽略掉某個(gè)文件,不讓這個(gè)文件提交到版本庫(kù)中,可以使用修改 .gitignore 文件的方法。
2、add 之后,取消追蹤某個(gè)文件 / 文件夾
git rm --cached filename
git rm -r --cached foldername

