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 newbranch,git push origin newbranch 

git cherry-pick <commitid> 、 git cherry-pick <commitid1>..<commitid2> 這裏的<commitid>一般來說不是當前分支上的,而是另一個分支上的<commitid>,用於將另一個分支上的提交commit(或者說複製到、摘抄到)到當前分支,詳見:git 場景——從一個分支cherry-pick一個或多個commit到另一個分支

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