【Git】常用命令

git init     初始化git文件夾

git add  <filename[,filename2,filename3]> 將修改的文件添加到暫存區(stage)

git commit -m "提交添加的註釋"      將暫存區的所有內容提交到當前分支

git-repo

git status 查看當前倉庫狀態

add 之前的狀態

add之後,commit之前的狀態

commit 所有修改之後的狀態

git diff <filename> 查看具體文件具體被修改的地方

git log 查看日誌

git log --pretty=oneline 美化信息格式

每行首一大串字符稱爲commit id 版本號,由SHA1計算出來的16進制

git reset 版本回退

  • git reset HEAD 表示當前版本
  • git reset HEAD^ 表示上個版本
  • git reset HEAD^^ 表示上上個版本
  • git reset HEAD~n 表示往上第n個版本
  • git reset <commitId> 表示指向某個具體commitId版本

注意在windows環境中由於cmd控制檯中換行符默認是^,而不是\,所以會出現以下錯誤

解決方法如下:

  • 加雙引號 git reset --hard "HEAD^"
  • 加一個^ 個人理解應該類似編程裏的轉義 git reset --hard HEAD^^
  • 換成~ git reset --hard HEAD~ 或者 git reset --hard HEAD~1

git reflog 查看git操作日誌

git checkout -- <filename> 將具體文件的修改撤銷,包括兩種情況:

  • 修改文件後,add 之前執行,則工作區與版本庫內容一模一樣
  • add之後,commit之前執行,則執行之後文件恢復到add之後的狀態

也就是說此命令將文件恢復到最近一次git add 或者 git commit 之後的狀態。

git reset HEAD <filename> 可以撤銷暫存區(stage)的修改(unstage):

以下例子說明,原本被add到暫存區的readme.txt文件,reset之後,狀態又恢復到了not staged for commit。

git rm <filename> 刪除文件

git remote add origin [email protected]:<yourRepoName>/learngit.git 關聯本地與遠程倉庫,origin 表示遠程倉庫

git push -u origin master 推送到用遠程倉庫

git clone [email protected]:<yourusername>/<yourReopName>.git 從遠程倉庫克隆一個庫到本地

創建與合併分支

git checkout -b dev 表示創建分支dev並切換到dev,

$ git checkout -b dev
Switched to a new branch 'dev'

等同於以下兩條分開的命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

git branch 列出所有分支,當前分支前面有一個*星號

$ git branch
* dev
  master

git merge dev 將dev分支合併到master分支:

git branch -d <分支名> 刪除分支

$ git branch -d dev
Deleted branch dev (was b17d20e).

git log --graph 查看分支合併圖

合併加上 --no-ff 參數,合併之後記錄分支歷史,如果fast forward 則不會記錄合併過的分支信息

git stash  將工作區狀態暫時存儲起來

$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge

git stash list 查看暫時保存起來的工作現場

git stash apply 將保存的工作現場恢復

git stash drop 將之前保存的現場清除

git stash pop 效果與 apply 之後 drop 一樣

 操作順序一般是 git stash 然後切換分支做優先級高的任務,之後切回當前分支,git stash pop 接着工作(注意我實驗的2.18 windows 版本中,假如在git stash之前有未add的修改,以及已經add未commit的修改,在stash,stash pop操作之後,這兩種修改都會變成未add的修改)

feature分支

如果要刪除一個未合併的分支需要通過 git branch -D <branchName> 強行刪除

多人協作

git remote 查看遠程倉庫信息

git remote -v 查看更詳細信息(fetch 和push 分別表示拉取和推送權限)

git push <origin> <需要推送到遠程倉庫的分支>

$ git push origin master
$ git push origin dev
  • master分支是主分支,因此要時刻與遠程同步;

  • dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;

  • bug分支只用於在本地修復bug,就沒必要推到遠程了,除非老闆要看看你每週到底修復了幾個bug;

  • feature分支是否推到遠程,取決於你是否和你的小夥伴合作在上面開發。

git pull 拉取遠程倉庫最新的提交

指定本地  dev 與 origin/dev 分支的鏈接:git branch --set-upstream-to <branch-name> origin/<branch-name>

$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
  • 查看遠程庫信息,使用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,如果有衝突,要先處理衝突。

git rebase 操作可以把本地未push的分叉提交歷史整理成直線;

以上參考了廖雪峯官網

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