【CodeSnippet】Git經常使用操做

Git 教程html

1. 建立倉庫

git initgit

初次建立須要先把全部的文件先 git add -A,添加到緩存區,而後 git commit -m "init commit"提交到本地倉庫,以後就能夠爲所欲爲建立分支。github

2. 版本

$ git version
git version 2.16.0.windows.2
複製代碼

3. 暫存區

  • 簡單查看shell

    $ git status -s
    M a
    A  "\345\267\245\344\275\234\346\270\205\345\215\225.txt"
    複製代碼
    • M 表明 Modify,修改,後面跟着的是文件 a,
    • A , Add,新增,後面跟着的是文件.txt,還有一個
    • D ,Delete,刪除
    • ?? 新增的文件,未添加到緩存區
  • 詳細查看vim

    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            new file:   "\345\267\245\344\275\234\346\270\205\345\215\225.txt"
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   a
    
    複製代碼
  • 添加新文件到暫存區windows

    git add "工做清單.txt"緩存

    git add (文件A) (文件B)...bash

    git add .git add -Agit add --all 添加全部的文件ssh

  • 查看不一樣編輯器

    • 還沒有緩存的改動:git diff
    • 查看已緩存的改動: git diff --cached
    • 查看已緩存的與未緩存的全部改動:git diff HEADgit diff HEAD (文件名)
    • 顯示摘要而非整個diff:git diff --stat
  • 取消已經緩存的內容

    git reset HEAD (文件名)

4. 本地庫

  • 提交到本地庫

    git commit -m '第一次版本提交'

  • 若是你沒有設置 -m 選項,Git 會嘗試爲你打開一個編輯器以填寫提交信息。

    git log -1 查看最新的提交信息:

  • 回滾提交

    git reset --hard f4f7dae5f1b48a05afed1d54160e1f28329083b8

    回滾提交到 f4f7dae5f1b48a05afed1d54160e1f28329083b8,而且拋棄這裏提交以前全部的提交

  • 切換到某次提交

    git checkout f4f7dae5f1b48a05afed1d54160e1f28329083b8

    切換隻是切換Head指針,並不會回滾提交,更不會拋棄提交。

5. 遠程倉庫

  • 本地要先生成對應的公鑰私鑰。

    ssh-keygen -t rsa -C "youremail@example.com"

    cd ~/.ssh

    找到裏面的 id_rsa,複製裏面的 key 到遠程庫中

    測試:

    $ ssh -T git@github.com
    Hi ChestnutPlus! You've successfully authenticated, but GitHub does not provide shell access. 複製代碼
  • 查看遠程倉庫

    git remote

  • 添加一個遠程倉庫

    git remote add [name] [url]

  • 刪除指定的遠程

    git remote rm [name]

  • 從遠程倉庫中抓取

    git fetch [remote-name]:這個命令會訪問遠程倉庫,從中拉取全部你尚未的數據。 執行完成後,你將會擁有那個遠程倉庫中全部分支的引用,能夠隨時合併或查看。它並不會自動合併或修改你當前的工做。當準備好時你必須手動將其合併入你的工做。

6. 分支

  • 查看分支

    $ git branch
      branchA
    * master
    複製代碼

    分支後面有星號*的表明是當前的分支

  • 新建分支

    git branch (branchName)

  • 切換分支

    git checkout (branchname):當你切換分支的時候,Git 會用該分支的最後提交的快照替換你的工做目錄的內容

    git checkout -b (branchname):建立新分支並當即切換到該分支下

  • 刪除分支

    git branch -d (branchname)

  • 分支合併

    git merge (branchname) 合併(branchname)到當前分支中

  • 合併衝突

    $ git merge branchA
    Auto-merging a
    CONFLICT (content): Merge conflict in a
    Automatic merge failed; fix conflicts and then commit the result.
    複製代碼

    當有衝突的時候,會提示 Automatic merge failed,咱們須要先解決衝突再提交。衝突的文件提示在輸出裏面,咱們須要對這些文件進行處理衝突。

    $ git diff a
    diff --cc a
    index c9109a0,b2eabc7..0000000
    --- a/a
    +++ b/a
    @@@ -1,4 -1,4 +1,8 @@@
      今天你吃飯沒?
    
    
    ++<<<<<<< HEAD
     +ccccccccccccccccccc
    ++=======
    + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
    ++>>>>>>> branchA
    複製代碼

    查看衝突,git diff (文件) 查看衝突的文件,最底下有寫着衝突的地方和所對應的分支。手動打開對應的文件,發現有以下的,而後手動編輯,解決衝突。

    今天你吃飯沒?
    
    
    <<<<<<< HEAD
    ccccccccccccccccccc
    =======
    bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
    >>>>>>> branchA
    複製代碼

    解決完成後,咱們須要主動告訴Git咱們已經解決好衝突了

    $ git status -s
    UU a
    $ git add a
    $ git status -s
    $ git commit
    [master 106ee75] Merge branch 'branchA'
    複製代碼

7. 提交歷史

  • 查看當前分支的提交歷史

    git log

    git log -10 後面的數字表示查看最新的10條提交

  • 能夠用 --oneline 選項來查看歷史記錄的簡潔的版本

    git log --oneline

  • 能夠用 --reverse 來逆向查看提交

    git log --oneline --reverse

  • 查看日誌以圖形

    git log --graph 查看到HEAD的全部提交

    git log --graph -2

    git log --graph --all 查看全部的提交

    git log --graph --all -2

  • 查找特定用戶的提交

    git log --author=Chestnut --oneline

  • 制定日期時間

    若是你要指定日期,能夠執行幾個選項:--since 和 --before,可是你也能夠用 --until 和 --after。

    • git log --oneline --before={1.week.ago} -2 查看1周以前的提交,限制2

    • git log --oneline --before={1.week.ago} --after={2019-02-18} -5 查看1周以前,且在2-18後的提交,取5個

8. 緩存

  • 移除該文件的版本控制,不會刪除該文件。

    git rm --cached -r 文件名

  • 全局忽略文件

    git config --list 一堆配置輸出,查看是否有 core.excludesfile=/Users/lxy/.gitignore_global,有就打開編輯,把想要忽略的文件編輯上,而後退出。沒有這個文件就手動生成。

    git config --global core.excludesfile "/c/Users/80253144/.ssh/globalGitIgnore"

  • 項目自身的忽略文件

    直接在對應的.git的相同目錄下,新建 .gitignore 文件,裏面編輯便可。

問題

1. git 錯誤 fatal: Not a valid object name: 'master'.

參考

初次建立須要先把全部的文件先 git add -A,添加到緩存區,而後 git commit -m "init commit"提交到本地倉庫,以後就能夠爲所欲爲建立分支。。

2. 記Git報錯-refusing to merge unrelated histories

參考

通常,咱們使用 git fetch 查看更新,而後使用 git merge origin/master,結果報錯:fatal: refusing to merge unrelated histories(拒絕合併不相關的歷史)。

出現這個問題的最主要緣由仍是在於本地倉庫和遠程倉庫其實是獨立的兩個倉庫。因此,咱們用這個命令:git pull origin master --allow-unrelated-historie

3. Git master branch has no upstream branch的解決

參考

如上圖的分支所示,origin/master 是遠程倉庫,跟原來本地的倉庫是兩個獨立的倉庫,以後咱們合併到本地分支上,就變成如上圖所示的樣子。而後,咱們想把 origin/master 合併到 head 去,git push origin 結果報標題的錯。git push 時通常會上傳到origin下的master分支上,然而當repository和branch過多,而又沒有設置關聯時,git就會產生疑問,由於它沒法判斷你的push目標。這裏就是遠程有一個 master,本地也有一個master,因此咱們須要先指定:git push --set-upstream origin master

看到最後一句:Branch 'master' set up to track remote branch 'master' from 'origin'.,分支 master 設置跟蹤遠程的分支 master。

場景

(1)拉取遠程倉庫代碼到本地

//下載origin倉庫的master分支代碼
$ git fetch origin master  

//比較本地的倉庫和遠程參考的區別
$ git log -p master.. origin/master  

//origin合併到本地倉庫master
$ git merge origin/master            
複製代碼

或者

//從遠程的origin倉庫的master分支下載到本地並新建一個分支temp
$ git fetch origin master:temp  

//比較master分支和temp分支的不一樣
$ git diff temp

//合併temp分支到master分支
$ git merge temp

//刪除temp
$ git branch -d temp
複製代碼

查看區別:

//顯示出全部有差別的文件列表
git diff origin/master master --stat   

//顯示指定文件的詳細差別
git diff branch1 branch2 <具體文件路徑>

//顯示出全部有差別的文件的詳細差別
git diff branch1 branch2
複製代碼

固然,若是有衝突,你就必需要解決衝突,才能合併。

(2)解決衝突

  • git merge origin/master:嘗試合併分支的時候,出現了衝突

    $ git merge origin/master
    Auto-merging README.md
    CONFLICT (content): Merge conflict in README.md
    Automatic merge failed; fix conflicts and then commit the result.
    複製代碼
  • git diff README.md:查看具體的衝突位置:

    $ git diff README.md
    diff --cc README.md
    index 5171bc4,34e6fe1..0000000
    --- a/README.md
    +++ b/README.md
    @@@ -2,4 -2,6 +2,10 @@@
    
    
    ++<<<<<<< HEAD
     +使得開發商;杜可風;斯達康;了
    ++=======
    + TEst使得開發商;杜可風;
    +
    + 2019年3月29日12:08:13,我作了修改。
    ++>>>>>>> origin/master
    複製代碼
  • vim README.md:手動解決衝突

  • 解決完成後,咱們須要主動告訴Git咱們已經解決好衝突了

    $ git status -s
    UU README.md
    複製代碼
    $ git add README.md
    複製代碼
    $ git status -s
    M  README.md
    複製代碼
    $ git commit
    [master 8dac097] Merge remote-tracking branch 'origin/master'
    複製代碼
  • 把結果告知遠程倉庫

    $ git push origin
    Counting objects: 6, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (6/6), done.
    Writing objects: 100% (6/6), 991 bytes | 495.00 KiB/s, done.
    Total 6 (delta 0), reused 0 (delta 0)
    To github.com:ChestnutPlus/GitTest.git
       61c3123..2f5987d  master -> master
    複製代碼
相關文章
相關標籤/搜索