GIT 及 SVN 詳細解析——博客彙總

常用的GIT命令詳細解析

1 .     HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令 git reset --hard commit_id。  
        git reset --hard HEAD^ :返回到最近的上一個版本 (回到過去)
        git reset --hard HEAD^^ :返回到最近的上上一個版本(回到過去)
        git reset --hard HEAD~100 :返回往上100個版本(回到過去)
        git reset --hard commit_id :回到未來的某個版本(回到未來)
       
        git reset HEAD file :可以把暫存區的修改撤銷掉(unstage),重新放回工作區(HEAD 表示最新的版本)


2 .     穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。   
        git log : 顯示從最近到最遠的提交日誌
        git log --pretty=oneline : 如果嫌輸出信息太多,看得眼花繚亂的,可以試試 (排列規則不一樣)


3 .     要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

   

4 .     工作區(Working Directory) : 你在電腦裏能看到的目錄就是工作區 (一個文件就是一個工作區)
        版本庫(Repository)        :工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫
        git版本庫裏面最重要的就是稱爲stage(或者叫index)的暫存區,Git爲我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD
   
        git add :把文件修改添加到暫存區
        git commit : 就是把暫存區的所有內容提交到當前分支  /  git commit -m "understand how stage works" 雙引號爲添加的註釋
        git status : 查看狀態
        git diff HEAD : 可以查看工作區和版本庫裏面最新版本的區別
   
5 .     git checkout ngcard-test: 切換本地分支
        git checkout -- file     :文件在工作區的修改全部撤銷
        兩種情況: 一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態
                          一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
                       總之,就是讓這個文件回到最近一次git commit或git add時的狀態。
     總結:
            場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
            場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
            場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
   
6 .     git rm file :刪除一個文件
        一是確實要從版本庫中刪除該文件,那就用命令git rm刪掉,並且git commit:   
   
7 .      ------->    先有本地庫,後有遠程庫的時候 如何關聯遠程庫 <----------
         git push -u origin master  /  git push origin master (簡化後的)
         由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,
         還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。

    小結:
        要關聯一個遠程庫,使用命令    git remote add origin git@server-name:path/repo-name.git;
        關聯後,使用命令 git push -u origin master 第一次推送master分支的所有內容;
        此後,每次本地提交後,只要有必要,就可以使用命令 git push origin master 推送最新修改;
        分佈式版本系統的最大好處之一是在本地工作完全不需要考慮遠程庫的存在,也就是有沒有聯網都可以正常工作,而SVN在沒有聯網的時候是拒絕幹活的!
        當有網絡的時候,再把本地提交推送一下就完成了同步,真是太方便了!


8 .     --------> 先創建遠程庫,然後,從遠程庫克隆 <-----------
        要克隆一個倉庫,首先必須知道倉庫的地址,然後使用 git clone 命令克隆。  / git clone git @github.com:michaelliao/gitskills.git
        Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快。
   
9 .     查看分支:git branch

        創建分支:git branch <name>

        切換分支:git checkout <name>

        創建+切換分支:git checkout -b <name>

        合併某分支到當前分支:git merge <name>

        刪除分支:git branch -d <name>
   
10 .   當Git無法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
         用 git log --graph  命令可以看到分支合併圖。


11 .   git merge --no-ff -m "merge with no-ff" dev  : 請注意--no-ff參數,表示禁用Fast forward, 本次合併要創建一個新的commit,所以加上-m參數,把                       commit描述寫進去。
         合併分支時,加上--no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。   


12 .      修復bug時,我們會通過創建新的bug分支進行修復,然後合併,最後刪除;
           當手頭工作沒有完成時,先把工作現場 git stash 一下,然後去修復bug,修復後,再 git stash pop ,回到工作現場。        
           git stash apply (先恢復)--> git stash drop (再刪除)       <==>  git stash pop (恢復的同時把stash內容也刪了)
    
13 .     git branch -D name :強行刪除
          開發一個新feature,最好新建一個分支;
          如果要丟棄一個沒有被合併過的分支,可以通過git branch -D <name>強行刪除。
    
14 .      首先,可以試圖用 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,如果有衝突,要先處理衝突。
   
15 .    創建標籤
         命令 git tag <name> 用於新建一個標籤,默認爲HEAD,也可以指定一個commit id;
         git tag -a <tagname> -m "blablabla..." 可以指定標籤信息;
         git tag -s <tagname> -m "blablabla..." 可以用PGP簽名標籤;
         命令 git tag 可以查看所有標籤。
   
16 .    刪除標籤
         git push origin <tagname> 可以推送一個本地標籤;

         git push origin --tags 可以推送全部未推送過的本地標籤;

         git tag -d <tagname> 可以刪除一個本地標籤;

         git push origin :refs/tags/<tagname> 可以刪除一個遠程標籤。
   -----------》》》20180809 》》》續-------》

17. 刪除git庫中untracked files(未監控)的文件

# 刪除 untracked files

git clean -f

 

# 連 untracked 的目錄也一起刪掉

git clean -fd

 

# 連 gitignore 的untrack 文件/目錄也一起刪掉 (慎用,一般這個是用來刪掉編譯出來的 .o之類的文件用的)

git clean -xfd

 

# 在用上述 git clean 前,牆裂建議加上 -n 參數來先看看會刪掉哪些文件,防止重要文件被誤刪

git clean -nxfd

git clean -nf

git clean -nfd

18.  把本地的 develop 分支強制(-f)推送到遠程 develop ,本地develop分支覆蓋遠程develop分支代碼

git push origin develop:develop -f


19. 根據標籤創建新的分支,並把新的分支推送至遠程

a.執行:git origin fetch 獲得最新

b.通過:git branch <new-branch-name> <tag-name>      例如:git branch  cfg-v2.3.2  tag-v20180801 根據tag創建新的分支.

c.可以通過git checkout newbranch   例如:git checkout cfg-v2.3.2 切換到新的分支

d.通過 git push origin newbranch    例如:git push origin cfg-v2.3.2 把本地創建的分支提交到遠程倉庫

》》》》》現在遠程倉庫也會有新創建的分支啦!


20.git stash (git 儲藏)的使用總結:

    Step1

  新增 git stash save -a "message" // 對於在項目里加入了代碼新文件的開發來說,-a選項纔會將新加入的代碼文件同時放入暫存區 類似於 git commit -a -m ""

    Step2

  查看列表 git stash list

      使用git stash show stash@{X}命令來查看,其中‘X’表示列表號。

    Step3

  應用的話是 git stash apply stash@{id}   //可以將列表中任何一次修改應用到當前工作區

    Step4

  關於 git stash pop 也可以將list中最新的提取出來,但是不同於apply, pop 會把list 中刪除,後期不易恢復

    Step5

  如果真的git stash pop 了,也是可以恢復的。// git log --graph --oneline $(git fsck | awk '/dangling commit/ {print $3}') 找到對應的commitId

  具體參考 http://www.jianshu.com/p/9a316b546808

    Step6

  刪除某個stash的話 git stash drop stash@{id} 

    Step7

  刪除全部的stash list 直接通過 git stash clear

       參考文獻https://www.cnblogs.com/yanghaizhou/p/5269899.html

    

使用於初學者剛開始學習GIT安裝使用教程(初學者必讀):

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

Git可視化極簡易教程 —— Git GUI使用方法 :

http://www.cnblogs.com/iruxu/p/gitgui.html

https://blog.csdn.net/allenjay11/article/details/51941829

https://blog.csdn.net/qq_34842671/article/details/70916587

https://blog.csdn.net/kevindgk/article/details/51606925

Git 命令表:

https://blog.csdn.net/zcf1002797280/article/details/50721462


eclipse的git插件安裝、配置與使用:

https://blog.csdn.net/u012052268/article/details/79160478#13-%E9%85%8D%E7%BD%AEgit%E6%8F%92%E4%BB%B6

https://blog.csdn.net/fengye_yulu/article/details/52116146

注意:紅色爲重點學習教程,藍色的只是部分參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章