git基本命令及常見處理文件問題

基本的拉取上傳文件命令

0.git pull先更新文件; git status  查看文件的增刪改狀態
1.git clone 在線庫存地址;   git clone -b  dev(遠程分支)  連接
2.git add 要提交的文件或者文件夾    或者git add .(表示提交全部修改過的文件,添加到暫存區)

注:git add 只將新建的或者已更改的文件添加到索引區。(不會添加刪除的文件)
3.git commit -m '備註';提交到暫存區  -m(默認爲master分支)
3.git push ;正式提交
4.git log  查看提交的日誌 或者git log --pretty=oneline 更加清楚明瞭的查看

ps:關聯遠程庫後,使用命令git push -u origin master第一次推送master分支的全部內容;

此後,每次本地提交後,只要有必要,就可使用命令git push origin master推送最新修改;
複製代碼

Git是跟蹤修改的,每次修改,若是不用git add到暫存區,那就不會加入到commit中。
用git diff HEAD -- qq.html命令能夠查看工做區和版本庫裏面最新版本的區別html

經常使用基本命令

1. git diff 提交文件以前可用此命令查看文件被修改了哪些
2. git log  上傳文件後  可查看提交的歷史信息 
        git log --pretty=oneline --abbrev-commit 找到歷史提交的commit id
        git log --graph 查看到分支合併圖。或者git log --graph --pretty=oneline --abbrev-commit
        
3. git reset --hard HEAD^ 回退到上一個版本
    --hard
4. git reset --hard 09BH(歷史版本16進制的前四位便可,git自動找)   回到指定版本
    若是關閉了git窗口  可以使用git reflog命令查看之間提交的版本
5.cat op.html 或者git show 查看文件內容
5. git checkout -- qq.html  或者 git restore op.html  把qq.html文件在工做區的修改所有撤銷,這裏有兩種狀況:
    (1)一種是 qq.html自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;
    (2)一種是 qq.htmlt已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。
6. git diff HEAD -- qq.html   查看工做區和版本庫裏面最新版本的區別
7. git reset HEAD <file> 能夠把暫存區的修改撤銷掉),從新放回工做區
8.git reflog 查看命令歷史,以便肯定要回到將來的哪一個版本。
9. git rm qq.html  刪除文件
10.git remote 查看遠程庫的信息 或用git remote -v顯示更詳細的信息  

11.git push origin dev(分支名稱)  推送對應分支
可是,並非必定要把本地分支往遠程推送,那麼,哪些分支須要推送,哪些不須要呢?
master分支是主分支,所以要時刻與遠程同步;
dev分支是開發分支,團隊全部成員都須要在上面工做,因此也須要與遠程同步;
bug分支只用於在本地修復bug,就不必推到遠程了,除非老闆要看看你每週到底修復了幾個bug;
feature分支是否推到遠程,取決於你是否和你的小夥伴合做在上面開發。
12. git tag v1.0(版本號) 爲項目打版本號(標籤)
    git push origin --tags 推送所有還沒有推送到遠程的本地標籤
    git tag -d v0.9 刪除標籤  先從本地刪除  而後git push origin :refs/tags/v0.(刪除一個遠程標籤)
    
    命令git tag <tagname>用於新建一個標籤,默認爲HEAD,也能夠指定一個commit id;
    命令git tag -a <tagname> -m "blablabla..."能夠指定標籤信息;
    命令git tag能夠查看全部標籤
複製代碼

分支及基本處理

1. git checkout -b dev 建立dev分支,而後切換到dev分支  或者 git switch  -b dev
    -b參數表示建立並切換
            至關於這兩條命令:
             git branch dev
             git checkout dev
 2. git branch  查看當前分支;    查看已有的本地及遠程分支: git branch -a
 3. git merge dev  將子分支合併到主分支master,合併後,查看主分支,和子分支內容同樣
   Fast-forward信息,Git告訴咱們,此次合併是「快進模式」,也就是直接把master指向dev的當前提交,因此合併速度很是快。
   
 總結:
Git鼓勵大量使用分支:

查看分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>或者git switch <name>
建立+切換分支:git checkout -b <name>或者git switch -c <name>
合併某分支到當前分支:git merge <name>
刪除本地分支:git branch -d <name>; 刪除遠程分支:git push origin --delete dev


複製代碼

處理文件常見問題

1.本地git rm file 後遠程倉庫還有該文件?
$ git add -u 只會處理已修改或者已刪除的文件,可是不會處理新建的文件
$ git commit -m "delete test"
$ git push

2.處理常見合併分支衝突 git

圖上意思: 編碼qe.html
衝突(內容):在q .html中合併衝突
自動合併失敗;修復衝突,而後提交結果。

Git告訴咱們,qe.html文件存在衝突,必須手動解決衝突後再提交。git status也能夠告訴咱們衝突的文件;
(1)git log --graph --pretty=oneline --abbrev-commit 看到分支的合併狀況
(2)把Git合併失敗的文件手動編輯爲咱們但願的內容,再提交。
(3)刪除feature1分支bash

分支管理策略

一般,合併分支時,若是可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支信息。
若是要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就能夠看出分支信息。
下面展現一下--no-ff方式的git merge:app

1.建立並切換分支
    git switch -c dev
 2. 修改文件並提交一個新的commit
    git add qe.html
    git commit -m 'change qe.html'
  3.切換回master主分支
    git switch master
  4. 準備合併dev分支,請注意--no-ff參數,表示禁用Fast forward:
      $ git merge --no-ff -m "merge with no-ff" dev 這種合併方法會在master分支上新建一個提交節點,從而完成合並
      
  5.  由於本次合併要建立一個新的commit,因此加上-m參數,把commit描述     寫進去。
      合併後,咱們用git log看看分支歷史:
      $ git log --graph --pretty=oneline --abbrev-commit
    
複製代碼

分支策略 在實際開發中,咱們應該按照幾個基本原則進行分支管理:ui

首先,master分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活;編碼

那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,好比1.0版本發佈時,再把dev分支合併到master上,在master分支發佈1.0版本;spa

你和你的小夥伴們每一個人都在dev分支上幹活,每一個人都有本身的分支,時不時地往dev分支上合併就能夠了。rest

合併分支時,加上--no-ff參數就能夠用普通模式合併,合併後的歷史有分支,能看出來曾經作過合併,而fast forward合併就看不出來曾經作過合併。日誌

Bug分支

團隊協做中,bug是連綿不斷的,因此,每一個bug均可以經過一個新的臨時分支來修復,修復後,合併分支,而後將臨時分支刪除。
若是如今有個bug,咱們來操做下:。
1.git stash  先把你當前分支的內容存貯起來,等之後恢復現場後繼續工做;
2.git switch master 切換到主分支,準備建立一個bug分支(issue-101);
3.git switch -c issue-101  建立一個bug分支(issue-101);
4.  git add qe.html
    git commit -m "fix bug 101"  修改bug並提交
5.修復完成後,切換到master分支,並完成合並,最後刪除issue-101分支:
  git switch master;
  git merge --no-ff -m "merged bug fix 101" issue-101
  git branch -d issue-101
  
 6.bug已修復,如今,是時候接着回到dev分支幹活 
    git switch dev
    git stash list 查看以前存貯的內容:
    stash@{0}: WIP on dev: f52c633 add merge
 7. 如今須要恢復一下存貯的內容,恢復有2種方法:
    (1)用git stash apply恢復,可是恢復後,stash內容並不刪除,你須要用git stash drop來刪除
    (2)用git stash pop,恢復的同時把stash內容也刪了
    再用git stash list查看,就看不到任何stash內容了
    你能夠屢次stash,恢復的時候,先用git stash list查看,而後恢復指定的stash,用命令:
    git stash apply stash@{0}
    
8. 在master分支上修復了bug後,咱們要想想,dev分支是早期從master分支分出來的,因此,這個bug其實在當前dev分支上也存在。

那怎麼在dev分支上修復一樣的bug?重複操做一次,提交不就好了?
 

一樣的bug,要在dev上修復,咱們只須要把4c805e2 fix bug 101這個提交所作的修改「複製」到dev分支。
注意:咱們只想複製4c805e2 fix bug 101這個提交所作的修改,並非把整個master分支merge過來。

爲了方便操做,Git專門提供了一個cherry-pick命令,讓咱們能複製一個特定的提交到當前分支:
    git branch
* dev
  master
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)
 
複製代碼

Git自動給dev分支作了一次提交,注意此次提交的commit是1d4b803,它並不一樣於master的4c805e2,由於這兩個commit只是改動相同,但確實是兩個不一樣的commit。用git cherry-pick,咱們就不須要在dev分支上手動再把修bug的過程重複一遍。code

總結: 修復bug時,咱們會經過建立新的bug分支進行修復,而後合併,最後刪除;

當手頭工做沒有完成時,先把工做現場git stash一下,而後去修復bug,修復後,再git stash pop,回到工做現場;

在master分支上修復的bug,想要合併到當前dev分支,能夠用git cherry-pick 命令,把bug提交的修改「複製」到當前分支,避免重複勞動。

Feature分支

添加一個新功能時,咱們爲了避免打亂主分支master,因此在咱們當前分支上(dev)新建分支

1. git switch -c feature-1  新建分支寫功能
2.git add <file>
3.git commit -m 'feature-1'
4.切回dev,準備合併
  git switch dev
  合併時若是該功能不適用,須要刪除,怎麼操做?
  以下:
   git branch -d feature-1
   報錯:error: The branch 'feature-1' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature-vulcan'.
銷燬失敗。Git友情提醒,feature-1分支尚未被合併,若是刪除,將丟失掉修改,若是要強行刪除,須要使用大寫的-D參數。。

如今咱們強行刪除:
git branch -D feature-1  便可成功
複製代碼

團隊協做

1.抓取分支: 參考 https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320
相關文章
相關標籤/搜索