Git學習筆記,
Git 的教程:
一:git的基礎操作--提交,發布
建立一個本地版本庫: git init
添加一個檔案: git add
提交一個檔案到本地版本庫: git commit -m 描述資訊
查看目前文檔的狀態: git status
在add前查看修改的內容: git diff 檔案名稱
查看提交的日誌: git log
查看命令的曆史: git reflog
二:git的版本控制
git的目前的版本是HEAD,回到前一個版本是: git reset --hard HEAD^
git回到任意版本是: git reset --hard commit——id
放棄未add的版本: git checkout -- file
一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態
情境1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
情境2:當你不但改亂了工作區某個檔案的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了情境1,第二步按情境1操作。
情境3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
查看遠程庫的資訊: git remote -v
刪除: 如果在工作區刪除了一個檔案
1. 如果你確定要刪除,那使用 git rm file 從版本庫中刪除,並且commit
2. 如果你是誤刪,則需要從版本庫中恢複檔案: git checkout -- file
三:串連遠程倉庫:
1. 產生密鑰:ssh-keygen -t rsa -C "18500524969@qq.com",在使用者目錄下可以找到這個檔案。
2. 註冊github帳號,把密鑰添加到gitHub
3. 串連遠端資料庫
1. 未建立本地倉庫
echo "# learngit" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/jiangerOne/learngit.git
git push -u origin master
2. 如果已經建立本地倉庫
git remote add origin https://github.com/jiangerOne/learngit.git
git push -u origin master
4. 從遠程庫複製
git clone git@github.com:jiangerOne/javaProject.git
四:分支操作:
1. 分支的基本操作: 某個分支的操作不會對其他分支的資料進行影響,如果要同步,則需要合并分支
查看當前的分支: git branch
建立一個新的分支: git branch dev
切換到dev: git checkout dev
git checkout -b dev = git branch+git checkout dev
合并某分支到當前分支:git merge dev
刪除分支: git branch -d dev
2. 分支衝突:
當一個分支提交了改變的內容,另一個分支也提交了改變了相同行的內容時,分支合并會衝突。
解決方案:首先解決衝突,可以使用git log --graph.
3. 分支策略
合并分支時,加上--no-ff參數就可以用普通模式合并,合并後的曆史有分支,
能看出來曾經做過合并,而fast forward合并就看不出來曾經做過合并。
在實際開發中,我們應該按照幾個基本原則進行分支管理:
1. 首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;
2. 那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,
比如v10版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;
3. 你和你的小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。
4.合并分支時,主分支不要提交,要合并
4. 建立bug分支:
1. 當你在dev上工作時,你突然發現一個bug,但是dev的工作還沒有做完,你需要儲存dev的環境
跑到master建立bug分支,修複bug
1. 儲存dev的當時狀態:git stash
2. 切換到master分支上建立bug分支:
git checkout master
git checkout -b bug--01
3. 修複完bug,合并bug分支,刪除bug分支
git merge bug--01
git branch -d bug--01
4. 回到dev,查看stash,刪除stash,繼續開始工作
checkout dev
git stash list
git stash apply恢複
git stash pop 恢複,刪除
5. 強行刪除未合并的新分支: 開發一個新feature,最好建立一個分支;
如果要丟棄一個沒有被合并過的分支,可以通過git branch -D <name>強行刪除。
6. 多人合作:
但是,並不是一定要把本地分支往遠程推送,那麼,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要時刻與遠程同步;
dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;
bug分支只用於在本地修複bug,就沒必要推到遠程了,除非老闆要看看你每周到底修複了幾個bug;
feature分支是否推到遠程,取決於你是否和你的小夥伴合作在上面開發。
7. 多人合作分支:
查看遠程庫資訊,使用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,如果有衝突,要先處理衝突。
五:標籤管理:
1. 標籤的主要作用是更好的標識版本
2. 建立一個標籤
命令git tag <name>用於建立一個標籤,預設為HEAD,也可以指定一個commit id;
git tag -a <tagname> -m "blablabla..."可以指定標籤資訊;
git tag -s <tagname> -m "blablabla..."可以用PGP簽名標籤;
命令git tag可以查看所有標籤。
git show tag 可以查看tag的資訊
3. 刪除一個標籤:
命令git push origin <tagname>可以推送一個本地標籤;
命令git push origin --tags可以推送全部未推送過的本地標籤;
命令git tag -d <tagname>可以刪除一個本地標籤;
命令git push origin :refs/tags/<tagname>可以刪除一個遠程標籤。
六:自訂git
上顏色
git config --global color.ui true
配置別名:
git config --global alias.st status