git經常使用命令小計

  • git init初始化一個本地git倉庫repository
  • git status查看狀態
  • git add <file>將工做區修改加到暫存區(stage)
  • git commit -m "<some message>"將暫存區(stage)提交到倉庫(repository)並寫一些備忘信息
  • git reset --hard HEAD^或者git reset --hard HEAD~1將工做區退回到倉庫(repository)中上一個版本
  • git checkout -- <file>將工做區中file文件的修改撤銷,包括把刪除的file復原(在添加到stage以前纔有效,若是將工做區文件的修改add到了stage,那麼再使用這個命令就會無效,這時應該先把stage的unstage撤銷掉再使用上面的命令)
  • git reset HEAD <file>將添加至stage的file文件unstage掉
  • git rm <file>把file從repository中刪除,以後再用commit就行
  • git remote add origin git@server-name:path/repo-name.git關聯一個遠程庫
  • git push -u origin master第一次將本地的repository的master分支推送到遠程,之後再push就不用加-u了
  • git clone git@server-name:path/repo-name.git從遠程倉庫clone一個倉庫到本地,同時會關聯到遠程倉庫
  • git clone -b <branchName> git@server-name:path/repo-name.git從遠程clone指定分支到本地
  • git branch <name>建立一個名爲name的分支
  • git checkout <name>切換到name分支上
  • git chekout -b <name>上面兩條命令合併以後的簡寫,即建立一個名爲name的分支並切換到那個分支
  • git branch查看本地全部分支,當前所在分支前面有一個*號
  • git branch -r查看遠程全部分支
  • git branch -a查看本地和遠程全部分支
  • git branch -d <name>刪除名爲name的分支
  • git branch -D <name>強行刪除名爲name的分支,用d刪除的話,如過name分支沒有被合併就沒法刪除,那麼就要用D
  • git merge <name>將指定name的分支合併到當前分支,其實就是把當前分支的內容更新爲指定name分支的內容(前提是name分支的修改是上次commit以後最新的修改,或者說在上次commit以後name分支commit的次數比當前分支commit的次數多),若是name分支和當前分支的修改都是在上次commit以後最新的修改且內容不同(或者說這兩個分支自上次commit以後各自commit的次數是同樣的),那麼 就會產生衝突,須要解決衝突才能在當前分支上完成合並。解決衝突的方法就行修改當前分支內容,肯定你想要當前分支的內容,而後再在當前分支上add和commit一次就能夠了,這時,當前分支會比name分支多一次提交,也就是當前分支的修改比name分支的修改要新(若是此時你切換到name分支上,再merge當前分支,那麼就會直接合並了,由於當前分支比name分支要新)
  • git merge <name>時,若是name分支沒有當前分支新,那麼就會提示Already up to date,就是說當前分支比起name分支是新的。
  • git log查看提交的日誌信息
  • git log --pretty=oneline查看只有一行的簡略日誌信息
  • git log --graph查看日誌信息的圖示信息
  • git log --grapg --pretty=oneline --abbrev-commit
  • git merge --no-ff表示在系統採起fast-forward時讓系統採用普通合併方式,而不是採用快速合併,普通合併會多一次commit,這樣在之後查看時可以看到合併歷史,而fast-forward合併則看不到曾經作過的合併
  • 分支管理策略:通常來講都是一個master分支,這個分支只用來發布新版本,不在上面幹活,應該新建一個dev分支,平時都在dev上面幹活,每一個人一個分支,以後合併到dev上面就行,要發佈時就把dev合併到master分支上便可。
  • git stash把當前工做現場先存起來(不是add也不是commit),能夠暫時去作其餘事,以後(主要應用場景是當前手頭工做沒作完不能commit,可是又有緊急的bug須要切換到其餘分支上去修復)
  • git stash list查看全部存起來的工做現場
  • git stash apply <指定stash>或者git stash pop <指定stash>,二者區別就是前者恢復工做現場後stash list當中並不刪除指定stash,然後者就是直接將stash list中的pop出去刪除了。
  • git remote查看遠程庫信息,遠程庫默認名字是origin,git remote -v查看更詳細的信息
  • git push origin <brancName>將分支推送到遠程的branch分支上
  • 若是在git clone時不指定branch名稱,那麼clone下來的只會包含遠程的master分支,在這以後若是要切換到遠程的某一分支上,例如dev分支,那麼就須要git checkout -b dev origin/dev,用這個命令建立本地的dev分支,而後就能夠在這個dev上修改,並在以後隨時push
  • 若是多我的同時關聯了遠程庫(多人協做時),在push的時候,發現有人已經向remote推送了他的提交,而你對一樣的文件作了修改,那麼在push的時候就會報錯rejected推送失敗,由於有衝突,因此這時候應該git pull拉取最新的提交併(自動地)在本地合併,產生衝突,而後本地解決衝突以後再add、commit,再push。
  • git pull從遠程拉取最新的修改到本地併合並,若是有衝突則須要在本地解決。git pull至關於git fetch加上merge
  • 接着上面的說,若是本地解決衝突再push上去以後,其餘的人是不會自動的得到更新消息的,就是說別人使用git status會提示up to date with origin/,他們須要git fetch或者git pull以後才能獲取到遠程最新的變更
  • git fetch從遠程取回全部分支的更新(但不會自動合併)
  • git fetch origin <branchName>從遠程取回branchName分支的更新(但不會自動合併)。使用fetch以後就能夠用git status查看到本地和遠程以後的變更了。
  • git rebase 變基
  • git diff <filename>不帶參數就是比較工做區和stage中filename文件的不一樣
  • git diff --cached <filename>比較stage和repository中filename文件的不一樣
  • git diff HEAD <filename>比較工做區和repository中filename文件的不一樣
  • 標籤
  • git add .只添加當前目錄下的更改
  • git add -A添加repository中全部目錄下的修改
  • 在本地新建一個分支再push到遠端:git checkout -b newbranchgit push origin newbranch
  • git cherry-pick <commitid>git cherry-pick <commitid1>..<commitid2>這裏的<commitid>通常來講不是當前分支上的,而是另外一個分支上的<commitid>,用於將另外一個分支上的提交commit(或者說複製到、摘抄到)到當前分支,詳見:git 場景——從一個分支cherry-pick一個或多個commit到另外一個分支
相關文章
相關標籤/搜索