Git 經常使用命令總結

如下的git命令是我參考了廖雪峯等關於git的文章以後,根據本身實際工做中接觸到的狀況而總結出來的一份清單,也是以前在公司用來培訓的資料。我會繼續補充和修改,歡迎留言指教。php

  • 自報家門 git config --global user.name "RystLee」 && git config --global user.email "rystlee100@gmail.com"git

  • 搭建倉庫 git init (產生的.git是版本庫文件)github

  • 查看倉庫的情況 git statusapp

  • 查看倉庫中的文件有什麼變化 git diff <file>ssh

  • 肯定倉庫中的文件的變化沒問題,將文件添加緩衝區(stage)並提交到倉庫(分支) git add <file> && git commit -m "comments"
    注:添加到暫存區的文件,再對其進行修改不會影響他們接下來的commit操做ui

  • 查看最近的改動 git log [—pretty=oneline]this

  • 將文件從緩衝區撤回 git reset HEAD <file>設計

  • 放棄文件最近一次的修改 git checkout — <file>版本控制

  • 時光機
    回到過去: git reset —hard commit_id 或者 HEAD^指針

HEAD是指針 指向當前版本 HEAD^^指向上上個版本 HEAD~10指向上第10個版本
返回如今: git reflog 查看提交歷史,找到你要的commit_id

  • 刪除文件 git rm <file>

  • 遠程倉庫GitHub

    • 建立SSH Key: 在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,若是已經有了,可直接跳到下一步。若是沒有,ssh-keygen -t rsa -C "rystlee100@gmail.com"。而後將id_rsa.pub的內容拷貝到github的帳戶列表裏。

    • 將本地倉庫和github上的遠程庫關聯並將本地的內容推送到遠程庫 git remote add origin git@github.com:rystlee/learngit.git && git push -u origin master; origin是遠程庫的默認名稱, -u參數負責將本地的master分支與遠程的master分支關聯起來,在之後的推送時不要加該參數 git push origin master

    • 克隆遠程庫 git clone git@github.com:rystlee/learngit.git

    • 查看遠程庫信息 git remote -v

  • 建立分支 git checkout -b dev (加上-b參數至關於兩條命令:git branch dev && git checkout dev)

  • 合併分支 在dev上工做完成以後,切回master,執行合併,而後刪除dev: git checkout master && git merge dev && git branch -d dev

  • 查看全部的分支 git branch (分支前有*號的表示當前工做的分支)

  • 查看分支合併圖 git log —graph

  • Fast Forward 默認的分支合併圖是丟掉分支信息的。禁用fast forward模式會新建一個commit來進行合併,這樣就會將分支信息保存下來 git merge —no-ff -m "merge with no-ff" dev

  • Bug分支 經過創建臨時分支來修復bug,可是若是當你在dev上進行的工做還沒完成而不能提交時,可使用git stash來把當前的工做現場臨時」藏匿」起來,這樣git status查看工做區將會是乾淨的,如今你能夠選擇在master或者dev上創建一個臨時的bug分支來進行修復bug的工作了。完成bug修復任務以後,git stash list查看以前藏匿的」工做現場」記錄
    $ git stash list
    stash@{0}: WIP on dev: 6224937 add merge
    使用git stash apply stash@{0}來恢復,使用git stash drop stash@{0}來刪除或者使用git stash pop將最近的工做現場恢復並刪除記錄。
    通常狀況:當手頭工做沒有完成時,先把工做現場git stash一下,而後去修復bug,修復後,再git stash pop,回到以前的工做現場。

  • Feature分支 開發一個新功能,最好新建一個分支,若是要丟棄一個沒有被合併過的分支,能夠經過git branch -D <name> 強行刪除該分支。若是直接在dev分支上開發該特性,那就可能比較麻煩了。

  • 推送分支到遠程庫 git push origin master 或推送其餘分支,如dev git push origin dev; Bug分支只用於本地修復bug,就不必推送到遠程了,除非老闆要看看你每週到底修復了幾個bug; Feature分支是否推到遠程,取決於你是否和你的小夥伴合做在上面開發。

  • 抓取分支 克隆遠程庫,默認狀況下,只能看到master分支;若是想在dev分支上進行開發,就必須建立遠程origin的dev分支到本地,命令是 git checkout -b dev origin/dev 這樣就創建了本地dev分支並與遠程dev分支的進行了連接

  • 關聯分支 若是git pull 或 git push提示」no tracking information」,則說明將本地的分支和遠程的分支沒有連接,用命令git branch —track <local_branch> origin/<remote_branch> 進行連接。

  • 多人協做的工做模式一般是:
    首先,能夠試圖用 git push origin <branch> 推送本身的修改;
    若是推送失敗,則由於遠程分支比你本地的新,須要先用git pull試圖合併;
    若是合併有衝突,則解決衝突,並在本地提交;
    沒有衝突或者解決掉衝突後,再用 git push origin <branch> 推送

  • 標籤是版本庫的快照,實質是指向某個commit的一個指針。
    git tag <tagname> 新建一個標籤,默認爲HEAD,也能夠指定一個commit_id
    git tag -a <tagname> -m 「comments」 能夠指定標籤信息
    git tag -s <tagname> -m 「comments」 能夠用PGP簽名標籤
    git tag 查看全部標籤
    git show <tagname> 查看某個標籤
    git tag -d <tagname> 刪除標籤
    git push origin <tagname> 推送標籤到遠程
    git push origin —tags 推送全部標籤到遠程
    git push origin :refs/tags/<tagname> 刪除遠程庫的標籤(先將本地要刪除的標籤幹掉,該推送就會將遠程的標籤同步刪除)

  • 讓git適當的顯示不一樣的顏色 git config —global color.ui true

  • 忽略特殊文件 https://github.com/github/git... 而後再加上本身定義的文件,最終獲得一個完整的.gitignore文件

  • 設置命令的別名
    git config —global alias.unstage ‘reset HEAD’ -> git unstage test.php (將暫存區的修改撤銷)
    git config —global alias.last ‘log -l’ -> 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"

  • 比較分支 合併分支以前能夠先進行比較 git diff <branch1> <branch2>

  • 關聯本地倉庫和遠程倉庫 若是你不是clone的遠程倉庫,就須要進行關聯操做:git remote add origin <server>:<repository>

  • 清理本地對應的遠程已經刪除的分支 git remote prune origin

  • 比較當前文件和上一次提交之間的差別 git diff HEAD^ HEAD <file>

  • 找出是誰最近改動過代碼 git blame <file> ,配合grep使用效果更佳

注意事項
  • 全部的版本控制系統,其實只能跟蹤文本文件的改動,不能跟蹤二進制文件內容的改動,不幸的是,Microsoft的Word格式是二進制格式,所以,版本控制系統是無法跟蹤Word文件的改動的

  • Git設計優秀主要是由於它跟蹤管理的是修改,而非文件,每一個文件只有一份,git會根據分支記錄的修改去控制工做區中的文件的內容。

  • master也是分支,但倒是主分支,HEAD指針指向的分支是當前工做的分支,良好的開發方式是新建一個分支(名字能夠是dev)進行開發,而後add、commit等,最後再切回master進行merge操做,master分支僅用來發布新版本。

  • 本地建立的分支若是不推送到遠程,對其餘人就是不可見的。

  • 修改文件未提交時切換分支,修改的內容會同步到切換到的分支上,直到提交以後。

  • .gitignore只能忽略那些原來沒有被track的文件,若是某些文件已經被歸入了版本管理中,則修改.gitignore是無效的。正確的作法應該是:git rm --cached logs/xx.log,而後更新 .gitignore 忽略掉目標文件,最後git commit -m "We really don't want Git to track this anymore!"

原文連接:https://macken.me/article/git-instructions

相關文章
相關標籤/搜索