git 經常使用命令

一、刷新遠程分支,查看如今都有哪些分支存在    命令:git remote update origin --prunelinux

 

二、切換分支:git checkout 分支名git

 

三、建立並切換分支:git checkout -b 分支名github

 

四、查看分支:git branchweb

 

五、查看全部分支:git branch -a數據庫

 

六、克隆指定分支代碼:git clone -b 分支名  倉庫地址ruby

 

七、推送分支,就是把該分支上的全部本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:bash

$ git push origin master 

若是要推送其餘分支,好比dev,就改爲:app

$ git push origin dev

 

 

一、 git(在git bash中操做)

  • 明確一些git中的概念工具

    -) git版本管理工具中四個區域概念:
    
      	(1)Workspace:工做區
    
      	(2)Stage:暫存區
    
      	(3)Repository:倉庫區(或本地倉庫)
    
      	(4)Remote:遠程倉庫
    
      	其中工做區和暫存區在各個不一樣的分支中是共享的(方便理解stash操做)
    
      -)git中一些單詞的大概意思
    
      	(1) HEAD   表示當前版本,上一個版本就是HEAD^(能夠寫爲HEAD~1),上上一個版本就是HEAD^^^^^(能夠寫爲HEAD~5),
    
      -) git中文件狀態
    
      	(1) untracked:新建的文件,沒有git add [filename] 的都屬於未被git追蹤到文件
      	
      	(2) 未加入到暫存區的文件: 指的是已經被追蹤(tracked)過,可是沒有加入到暫存區(已經執行過git add的可是此次修改後尚未git add)	
      	
      -)遠程庫
    
      	(1) origin : git給遠程庫起的默認名稱是origin
  • git initfetch

    git init 初始化git倉庫
    
      git init [program-name] 新建一個目錄,將其初始化爲Git代碼庫
  • git clone(默認 : clone下來的版本只能看到master分支, 若是,想要在dev分支上開發,就必須建立遠程 origin的dev分支到本地)

    git clone git@github.com:yanqiangsjz/website.git 將遠程倉庫克隆到本地開發(多人協做開發)
    
      git checkout -b [branch] [remote]/[branch] (建立遠程[remote]的[branch]分支到本地。  通常遠程倉庫和本地倉庫分支命名同樣)
  • git config (--global參數是全局參數,也就是這些命令在這臺電腦的全部Git倉庫下都有用。 若是不加,那隻針對當前的倉庫起做用。)

    git config --list 顯示當前的Git配置
    
      git config user.name 查看用戶名
    
      git config user.email  
    
      git config --global user.name [username] 設置全局用戶名
    
      git config --global user.email [email]
    
      git config --global color.ui true 配置Git顯示顏色
  • git add

    git add [filename]  添加指定文件到暫存區(表示添加新文件和編輯過的文件不包括刪除的文件)
    
      git add [dir]  添加指定目錄到暫存區,包括子目錄    
    
      git add .  添加當前目錄的全部文件到暫存區(表示添加新文件和編輯過的文件不包括刪除的文件)
    
      git add -u  表示添加編輯或者刪除的文件,不包括新添加的文件
  • git rm filename

    git rm [filename] 刪除工做區文件並放進暫存區
      若是想從暫存區撤銷:git reset HEAD -- [filename]
      若是想撤銷工做區的修改:git checkout -- [filename]
    
      注意區別 : rm [filename]  刪除工做區文件, 並無放進暫存區
      若是想撤銷工做區的修改:git checkout -- [filename]
    
      git rm --cached [filename]	中止追蹤文件,但該文件會保留在工做區(untracked狀態)
  • git diff

    git diff [filename] 比較的是工做區文件與暫存區文件的差別
    
      git diff --cached [filenam] 比較的是暫存區的文件與上一個commit的差別
      
      git diff HEAD -- [filename] 比較的是工做區與當前分支最新commit之間的差別
  • git status

    git status 查看文件狀態; 還能夠在分支合併衝突的時候提示哪一個文件衝突
  • git commit

    git commit -m [message]  暫存區提交到倉庫區
    
      git commit [filename1] [filename2] ... -m [message]  暫存區的指定文件提交到倉庫區
    
      git commit -a -m [message]  工做區中修改後,還未使用git add . 命令添加到暫存區中的文件也一併提交上去 
      至關於git add . 與git commit –m [message] 兩句操做合併爲一句進行使用。commit完成事後,git status,
      下方的工做區是乾淨的
  • git log

    git log 查看當前分支的版本歷史
      
      git log --stat 查看commit歷史,以及每次commit發生變動的文件
    
      git log --pretty=oneline 查看從最近到最遠的提交日誌簡單日誌(--pretty=oneline:單行模式)
    
      git log -1 查看最近一次的提交信息
    
      git log -n 查看最近n次的提交信息
    
      git log --graph  查看分支合併圖
    
      git log --graph --pretty=oneline  查看分支合併圖;簡單日誌
    
      git reflog 查看命令歷史,以便肯定要回到將來的哪一個版本
  • git blame

    git blame [filename]  查看指定文件是什麼人在什麼時間修改過
  • git shortlog

    git shortlog -sn 查看全部提交過的用戶,按提交次數排序
  • git show

    git show [commit] 顯示某次提交時,文件變化
      
      git show [commit]:[filename]  顯示某次提交時,某個文件的內容(注意[commit]:[filename]冒號之間沒有空格)
  • git checkout (1)

    git checkout -- [filename]  工做區filename的修改撤銷
    
      git checkout . 撤銷工做區的所有修改
    
      解釋 :一種是文件修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;
      一種是文件已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。
      總之,就是讓這個文件回到最近一次git commit或git add時的狀態。
  • git checkout (2)

    git checkout [branch] 切換分支
    
      git checkout -b [branch] 建立並切換到該分支(若是在切換分支的時候,未commit, 有可能會報錯)
  • git checkout (3)

    git checkout -b [branch] [remote]/[branch]
      說明:
      多人協做時,若是同事從遠程庫clone時,默認狀況下,你的同事只能看到本地的master分支。若是,你的同事要在([branch])分支上開發,
      就必須建立遠程([remote])的([branch])到本地
  • git reset (1)

    git reset [filename] 重置暫存區的指定文件,與上一次commit保持一致,工做區不變
    
      git reset --hard  重置暫存區與工做區,與上一次commit保持一致
    
      git reset --hard HEAD~2  回退到某個版本(這裏是從當前版本回退兩個版本)
    
      git reset --hard commitID 回退到某個版本(commitID是版本號)
  • git reset (2)

    git reset HEAD -- [filename] 把暫存區的修改撤銷(unstage),從新放回工做區
  • git branch 分支名稱

    git branch [branch] 建立分支  
    
      git branch 列出全部本地分支
    
      git branch -a 列出全部本地分支和遠程分支
    
      git branch -r 列出全部遠程分支
    
      git branch -d [branch] 刪除分支
    
      git branch -D [branch]  強制刪除一個尚未合併(已經commit)的分支
    
      說明:
      一、若是一個分支在開發完成之後(分支已經commit)待合併,若是出於某種緣由這個分支廢棄了,可是這個分支必須刪除。git branch -D [branch]
      二、若是一個分支尚未commit, 是可使用 git branch -d [branch]
  • git merge (merge以前必須都先commit,即工做區和暫存區使用git status 應該是乾淨的工做區域,便是已是最新的commit)

    git merge [branch] 合併指定分支([branch])到當前分支
    
      git merge --no-ff -m [message] [branch] 合併指定分支([branch])到當前分支,禁用Fast forward模式
    
      解釋 : 禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就能夠看出分支信息。
    
      必要 : 若是merge出現衝突, 則解決衝突之後必須:一、git add 二、git commit。
    
      建議 :
      (1 解決完成衝突之後,最好直接將分支刪除,若是須要,再新建一條分支。緣由是在解決衝突了之後,若是還切換回以前的分支繼續開發,
      分支仍是衝突發生前的內容(解決衝突只解決的主分支master的(並且衝突解決不是所有按照分支內容解決的)因此再次提交會報錯。
      (2 若是合併衝突徹底放棄原來主分支的衝突採用dev分支的內容,則合併後主分支的內容和現存在dev分支是同樣的內容,不刪除原來的分
      支繼續在上面開發也是能夠的
    
      衝突斷定機制 : 先尋找兩個commit的公共祖先,比較同一個文件分別在ours和theirs下對於公共祖先的差別,而後合併這兩組差別若是
      雙方同時修改了一處地方且修改內容不一樣,就斷定爲合併衝突,依次輸出雙方修改的內容
    
      分支策略 : 首先,master分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活;那在哪幹活呢?幹活都在dev分支上,
      也就是說,dev分支是不穩定的,到某個時候,好比1.0版本發佈時,再把dev分支合併到master上,在master分支發佈1.0版本;每一個人
      都在dev分支上幹活,每一個人都有本身的分支,時不時地往dev分支上合併就能夠了。
    
      補充建議 : 若是在dev分支上正在開發一個功能,可是這是master上須要解決一個bug,這時須要切換回master在開發出一個bug分支  來解決
      這個bug,可是在dev分支上功能尚未開發完,不能commit。這時解決辦法是:第一步、將dev分支上的工做現場  ‘封存’起來(git stash)
      第二步、 切換到主分支,新建主分支的bug分支,將bug修改完而後切換回主分支將bug分支合併。 第三部、 切換回dev分支,將bug分支同時
      合併到dev分支(緣由是 : 避免是若是bug分支上修改的東西太多,在最後  dev開發完成之後,master合併dev分支的時候出現大面積的衝突)
  • git stash

    git stash list 查看使用儲藏起來的工做現場
    
      git stash apply 恢復工做現場(可是stash內容並不刪除)
    
      git stash drop  刪除stash內容
    
      git stash pop  恢復工做現場並刪除stash內容
      
    
      說明:
      git stash 只能「儲藏」已被追蹤過的文件。意思就是說若是是新添加的文件尚未執行過`git add`的文件,在使用git stash後仍是會在工做區中出現,
      並不會別「儲藏」。因此要使用git stash, 請將untrack狀態的文件執行git add, 使其可被git追蹤
    
      git stash 把當前工做現場「儲藏」起來(若是在一個分支上修改了文件可是由於尚未修改完不能提交的時候,  若是要開發出一個新的分支解決一個問題,
      若是不使用git stash, 那麼在另外一個分支上也是能夠看到這個分支上修改的內容。)
    
      結論 : 
      1.工做區和暫存區是共用的,在各個分支裏均可以看到沒被stash的文件。
      2.在工做區和暫存區的文件均可以stash,pop以後都會出如今工做區
      
      
      說明 : 假設在dev分支上正在開發,突然程序出現bug,須要即刻修復,可是dev分支上的任務尚未完成,沒法提交合併到master。
      可是如今就須要在master上建立一個分支bugs去修復這個問題。由於工做區和暫存區對全部分支默認都是共用的,因此在bugs分支
      上會執行dev分支上未完成的修改。這樣是不容許的。因此咱們能夠在dev分支中git stash 將dev分支
      中的工做區和暫存區隱藏起來,這樣在別的分支中就看不到dev分支工做區中和暫存區中的已有的工做,這意味着工做區是乾淨的。咱們能夠在
      bugs分支中能夠看到工做區是乾淨的,能夠執行任意咱們的任務。等待bugs分支開發完成,再切換到master分支,接着將bugs分支merge
      到master。可是如今咱們思考一下,如今主分支是最新的(修復了bugs而且merge上去的),可是咱們的dev分支卻仍是和未修復bugs的
      master主分支同步的版本。若是這樣的話,在咱們開發完dev分支而且合併到master分支上時,就有可鞥會出現問題(除非是增長文件,不然就
      會出現合併衝突)。若是咱們的dev分支版本如今不存在master中存在的bug,則咱們徹底能夠放心。可是若是dev中也會出現像master
      中出現的bug,則當咱們將dev合併到master中時,仍是會出現一樣的bug。主要是在這種狀況下,還會發生合併時候衝突。因此在將bugs
      合併到master之後,咱們也能夠選擇將bugs分支合併到dev分支中,合併完成以後,如今master和dev中的代碼是同樣的。可是咱們以前
      在dev中執行了git stash, 還有「儲藏」的工做區中已經開發但未提交的內容,當咱們執行git stash pop 恢復以前的工做現場並刪除
      stash內容,會發現有衝突發生了(由於如今dev分支和master分支是同樣的,如今該文件是已經修復完成的, 可是咱們釋放的工做區中以前就對
      該文件作了修改:同一個文件不一樣的內容,這樣就會明顯的出現衝突)。這是咱們就須要解決這些衝突(其實就是將以前修改的刪掉,保留和如今
      master主分支中的文件同樣的信息)。解決完成之後。咱們就徹底解決了之後dev合併到master中可能存在的衝突,而且在合併之後不會再出現一樣
      的錯誤
  • git remote (git給遠程庫起的默認名稱是origin)

    git remote -v 查看遠程庫的信息
    
      git remote show [remote] 顯示某個遠程倉庫的信息
    
      git remote add [remote] [url] 增長一個新的遠程倉庫,並命名 (通常是origin)
    
      git remote rm [remote]  刪除遠程庫
  • git push

    git push [remote] master  將主分支推送到遠程庫
      
      git push [remote] [branch] 將([branch])分支推送到遠程庫
    
      git push [remote] [tagname] 推送某個標籤到遠程
    
      git push [remote] --tags 一次性推送所有還沒有推送到遠程的本地標籤
  • git pull origin 分支名稱 (取回遠程倉庫的變化,並與本地分支合併)

    git pull [remote] [branch]  取回遠程倉庫的變化,並與本地分支合併
    
      說明 : 在向遠程庫推送某個分支的時候,須要先"Git pull"更新本地的代碼
    
      即 : 若是你的同事先在dev分支推送他的提交,接下來你去推送頗有可能會失敗。由於你的同事最新提交和你試圖推送的提交有衝突,
      解決辦法也很簡單,Git已經提示咱們,先用git pull把最新的提交從origin/dev抓下來,而後,在本地合併,解決衝突,
      git add -> git commit -> 再推送
    
      若是: git pull 也失敗了 : 
      			$ git pull
      			remote: Counting objects: 8, done.
      			remote: Compressing objects: 100% (6/6), done.
      			remote: Total 8 (delta 2), reused 8 (delta 2), pack-reused 0
      			Unpacking objects: 100% (8/8), done.
      			From github.com:yanqiangsjz/rhjt
      			   6876a33..e2516f8  oneline    -> origin/oneline
      			There is no tracking information for the current branch.
      			Please specify which branch you want to merge with.
      			See git-pull(1) for details.
      			
      			    git pull <remote> <branch>
      			
      			If you wish to set tracking information for this branch you can do so with:
      			
      			    git branch --set-upstream-to=origin/<branch> oneline
      
      緣由 : 沒有指定本地dev分支與遠程origin/dev分支的連接,根據提示,設置dev和origin/dev的連接:git branch --set-upstream-to=origin/dev dev
    
      git pull --rebase origin master 遠程庫同步到本地庫  (解決的問題:error: failed to push some refs to ‘git@gitee.com:name/project.git’)
  • git branch --set-upstream-to=origin/dev dev

    git branch --set-upstream-to=origin/dev dev 設置dev和origin/dev的連接。成功之後就能夠git pull
  • git tag

    git tag [tagname] 爲當前HEAD打標籤(本地tag)
      
      git tag [tagname] commitId(commitId 默認未HEAD; 本地tag)
    
      git tag -a [tagname] -m [message] commitId 爲本地tag添加說明
    
      git tag 查看全部標籤信息
    
      git show [tagname] 查看某個tag信息
    
      git tag -d [tagname] 刪除本地標籤
  • 刪除遠程標籤

    git tag -d [tagname] -> git push [remote] :refs/tags/[tagname]
    
      說明:git tag -d [tagname](先從本地刪除);  git push [remote] :refs/tags/[tagname](而後,從遠程刪除)
  • git checkout -b [branch] [tag]

    git checkout -b[branch] [tagname] 新建一個分支,指向某個tag
  • git fetch (取回遠程倉庫的變化,但並不會主動與本地分支合併。這個比git pull 更安git全)

    //方法一 例子
      git fetch origin master //從遠程的origin倉庫的master分支下載代碼到本地的origin master
    
      git log -p master.. origin/master//比較本地的倉庫和遠程參考的區別
    
      git merge origin/master//把遠程下載下來的代碼合併到本地倉庫,遠程的和本地的合併
    
      //方法二
      git fetch origin master:temp //從遠程的origin倉庫的master分支下載到本地並新建一個分支temp
    
      git diff temp//比較master分支和temp分支的不一樣
    
      git merge temp//合併temp分支到master分支
    
      git branch -d temp//刪除temp

2. gitHub

  • 將本地git倉庫同步到github上

    1. git remote add [remote] [url]
      
      2. git push -u [remote] [branch] (指定[remote]爲默認主機)
      
      3. 之後修改提交到遠程庫直接git push [remote] [branch]就能夠了  (不帶任何參數的git push,默認只推送當前分支)

三、 git自定義

  • 忽略特殊文件

    有些時候,你必須把某些文件放到Git工做目錄中,但又不能提交它們,好比保存了數據庫密碼的配置文件啦,等等,
      每次git status都會顯示Untracked files ...,有強迫症的童鞋內心確定不爽。好在Git考慮到了你們的感覺,
      這個問題解決起來也很簡單,在Git工做區的根目錄下建立一個特殊的.gitignore文件,而後把要忽略的文件名填
      進去,Git就會自動忽略這些文件不須要從頭寫.gitignore文件,GitHub已經爲咱們準備了各類配置文件,
      只須要組合一下就可使用了。全部配置文件能夠直接在線瀏覽. 查看請點擊下面的連接

    https://github.com/github/gitignore

  • 配置別名(--global參數是全局參數,也就是這些命令在這臺電腦的全部Git倉庫下都有用,針對當前用戶。若是不加,那隻針對當前的倉庫起做用。)

    git config --global alias.st status (爲查看狀態配置別名)
      git config --global alias.last 'log -1' (爲顯示最後一次提交信息配置別名)
      git config --global alias.unstage 'reset HEAD' (爲暫存區的修改撤銷回工做區配置別名)
      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"
      
      那麼配置文件放在哪裏呢:
    
      (1) 每一個倉庫的Git配置文件都放在.git/config文件中
      (2) 當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中 
      (3) 咱們能夠直接在配置文件中進行配置
  • pwd(linux命令)

    pwd 顯示當前目錄
相關文章
相關標籤/搜索