Table of Contents
1.GIT結構:
GIT一般分爲工作區、暫存區、本地倉庫和遠端分支:
- 工作區、暫存區、本地倉庫在本地計算機上。
- 工作區:本地電腦上的文件夾
- 暫存區:工作區有一個隱藏目錄 .git(這是git的版本庫),裏面含:stage的暫存區,git爲我們創建的第一個分支master以及指向master的一個指針HEAD
2.初始化一個Git倉庫
mkdir git_repo
git init
3.工作區(working area)
git status 隨時掌握工作區的狀態
git add <filename> 添加到暫存區的stage
git commit -m <message> 添加到暫存區的master
git diff <filename> 可以查看修改內容(如果git status告訴你有文件被修改過)
git checkout -- file 把file文件在工作區的修改全部撤銷.其實是用版本庫裏的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”
git rm file 從版本庫中刪除該文件
4.暫存區(stage):
git log 查看提交歷史,以便確定要回到過去
git reflog 查看命令歷史,以便確定要回到未來
git reset --hard commit_id 歷史之間穿梭,HEAD指向的版本就是當前版本
git reset --hard HEAD^ 回退到上一個版本
5.本地倉庫與github倉庫:
git remote 查看遠程庫的信息
git remote -v 顯示更詳細遠程庫的信息
git remote add origin [email protected]:myname/learngit.git
把一個已有的本地倉庫與github倉庫關聯添加後,遠程庫的名字就是origin,這是Git默認的叫法
git remote rm origin 刪除已有的GitHub遠程庫
git push -u origin master 把本地庫的所有內容推送到遠程庫上,由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
git clone 克隆
git push origin master 推送分支,就是把該分支上的所有本地提交推送到遠程庫,推送時,要指定本地分支
git push origin branch-name 推送其他分支
git pull 抓取遠程的新提交
6.分支:
並不是一定要把本地分支往遠程推送,那麼,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要時刻與遠程同步;
dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;
bug分支只用於在本地修復bug,就沒必要推到遠程了,除非老闆要看看你每週到底修復了幾個bug;
feature分支是否推到遠程,取決於你是否和你的小夥伴合作在上面開發。
總之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,視你的心情而定!
1>dev使用分支:
git branch 查看分支
git branch <name> 創建分支
git checkout <name> 切換分支
git checkout -b <name> 創建+切換分支
git merge <name> 合併某分支到當前分支 1.Fast-forward 2.Auto-merge 3.the 'recursive' strategy 4.
git merge --no-ff -m "merge with no-ff" dev --no-ff用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併看不出來曾經做過合併。
git branch -d <name> 刪除分支
git log --graph 查看到分支合併圖
git log --graph --pretty=oneline --abbrev-commit 查看到分支合併圖
git push origin branch-name 推送分支
git push origin branch-name 抓取分支
git checkout -b dev origin/dev 創建本地dev分支, 小夥伴要在dev分支上開發,就必須創建遠程origin的dev分支到本地
git branch --set-upstream branch-name origin/branch-name 建立本地分支和遠程分支的關聯
多人協作的工作模式通常是這樣:
首先,可以試圖用git push origin <branch-name>推送自己的修改;
如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;
如果合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功!
ps:如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
2>Bug分支: --- 提供了一個stash功能
git stash 把當前工作現場“儲藏”起來,等以後恢復現場後繼續工作.
git stash list 查看stash儲藏內容
git stash apply 恢復,但是恢復後,stash內容並不刪除
git stash apply stash@{0} 恢復指定的stash
git stash drop 刪除stash內容
git stash pop 恢復+刪除stash內容
3>Feature分支:
每添加一個新功能,最好新建一個feature分支
開發一個新feature,最好新建一個分支;
如果要丟棄一個沒有被合併過的分支,可以通過git branch -D <name>強行刪除。
7.Rebase:
git rebase 特點:把分叉的提交歷史“整理”成一條直線,看上去更直觀。缺點是本地的分叉提交已經被修改過了。
8.標籤:
1>創建標籤:
git tag <tagname> 用於新建一個標籤,默認爲HEAD
git tag <tagname> <commit_id> 用於新建一個標籤,指定一個commit id
git tag -a <tagname> -m "tag information" 可以指定標籤信息,默認爲HEAD
git tag -a <tagname> -m "tag information" commit id 可以指定標籤信息,指定一個commit id
git tag 查看所有標籤。PS:標籤不是按時間順序列出,而是按字母排序的。
git show <tagname> 查看標籤信息
PS: 標籤總是和某個commit掛鉤。如果這個commit既出現在master分支,又出現在dev分支,那麼在這兩個分支上都可以看到這個標籤。
2>操作標籤
git tag -d <tagname>可以刪除一個本地標籤;
git push origin <tagname>可以推送一個本地標籤;
git push origin --tags可以推送全部未推送過的本地標籤;
git push origin :refs/tags/<tagname>可以刪除一個遠程標籤。PS:先刪除本地標籤
9.自定義Git:
git config --global color.ui true Git顯示顏色,會讓命令輸出看起來更醒目
在Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,Git就會自動忽略這些文件。
不需要從頭寫.gitignore文件,GitHub已經爲我們準備了各種配置文件,只需要組合一下就可以使用了。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore
忽略文件的原則是:
忽略操作系統自動生成的文件,比如縮略圖等;
忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生的.class文件;
忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。
忽略某些文件時,需要編寫.gitignore;
.gitignore文件本身要放到版本庫裏,並且可以對.gitignore做版本管理!
git add -f App.class 如果你確實想添加該文件,可以用-f強制添加到Git:
10.配置:
1>配置別名:
git config --global alias.st status 告訴Git,以後st就表示status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.last 'log -1' 配置一個git last,讓其顯示最後一次提交信息
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 甚至還有人喪心病狂地把lg配置成
2>配置文件:
1.每個倉庫的Git配置文件都放在.git/config文件中
2.當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中
11.搭建Git服務器:
sudo apt-get install git 安裝git
sudo adduser git 創建一個git用戶,用來運行git服務