天天看點

git常用指令

一、git常用指令

重點:送出本地分支到遠端分支

$ git push origin test:master         // 送出本地test分支作為遠端的master分支 //好像隻寫這一句,遠端的github就會自動建立一個test分支

$ git push origin test:test              // 送出本地test分支作為遠端的test分支

執行個體:git push origin 20180228mybank-fbi:20180228mybank-fbi

1、git clone

擷取一個url對應的遠端Git repo,建立一個local copy;

git clone[url];

clone下來的repo會以url最後一個斜線後面的名稱命名,建立一個檔案夾,如果想要指定特定的名稱,可以git clone [url] newname指定;

2、git status

查詢狀态;

git status -s: -s表示short, -s的輸出标記會有兩列,第一列是對staging區域而言,第二列是對working目錄而言.

git常用指令

圖一

3、git log(show commit history of a branch)

檢視送出的曆史記錄

注意:在開發過程中多人修改同一個檔案很常見,是以可以通過此指令檢視修改資訊記錄

git常用指令

圖二

4、git add

在送出之前,Git有一個暫存區(staging area),可以放入新添加的檔案或者加入新的改動;

commit時送出的改動是上一次加入到staging area中的改動,而不是我們disk上的改動;

git add.

會遞歸地添加目前工作目錄中的所有檔案;

包括一些編譯器的臨時檔案和編譯檔案都會被整體add;

"."使用點号時,請先git status 檢視目前工作區域狀态,防止臨時檔案也被添加

git add[檔案路徑]

這樣可以直接具體到某個檔案

5、git commit

送出已經被add進來的改動;

git commit -m “the commit message"

git commit -a

會先把所有已經track的檔案的改動add進來,然後送出(有點像svn的一次送出,不用先暫存). 對于沒有track的檔案,還是需要git add一下;

git commit --amend

增補送出. 會使用與目前送出節點相同的父節點進行一次新的送出,舊的送出将會被取消;

6、git revert(類似于svn的revent)

反轉撤銷送出.隻要把出錯的送出(commit)的名字(reference)作為參數傳給指令就可以了.

git revert HEAD: 撤銷最近的一個送出.

git revert會建立一個反向的新送出,可以通過參數-n來告訴Git先不要送出

7、git rm

git rm file: 從staging區移除檔案,同時也移除出工作目錄.

git rm --cached: 從staging區移除檔案,但留在工作目錄中.

git rm --cached從功能上等同于git reset HEAD,清除了緩存區,但不動工作目錄樹.

8、git stash

把目前的改動壓入一個棧.

git stash将會把目前目錄和index中的所有改動(但不包括未track的檔案)壓入一個棧,然後留給你一個clean的工作狀态,即處于上一次最新送出處.

git stash list會顯示這個棧的list.

git常用指令

圖三

git stash apply:取出stash中的上一個項目(stash@{0}),并且應用于目前的工作目錄.

git常用指令

圖四

也可以指定别的項目,比如git stash apply stash@{1}.

如果你在應用stash中項目的同時想要删除它,可以用git stash pop

删除stash中的項目:

git stash drop: 删除上一個,也可指定參數删除指定的一個項目.

git stash clear: 删除所有項目.

9、git branch

git branch可以用來列出分支,建立分支和删除分支.

git branch -v可以看見每一個分支的最後一次送出.

git branch: 列出本地所有分支,目前分支會被星号标示出.

10、git merge

把一個分支merge進目前的分支.

git merge [alias]/[branch]

把遠端分支merge到目前分支

11、git fetch(download new branches and data from a remote repository.)

git fetch将會取到所有你本地沒有的資料,所有取下來的分支可以被叫做remote branches,它們和本地分支一樣(可以看diff,log等,也可以merge到其他分支),但是Git不允許你checkout到它們.

12、git pull(pull == fetch + merge FETCH_HEAD)

git pull會首先執行git fetch,然後執行git merge,把取來的分支的head merge到目前分支.這個merge操作會産生一個新的commit.

如果使用--rebase參數,它會執行git rebase來取代原來的git merge.

13、git rebase

--rebase不會産生合并的送出,它會将本地的所有送出臨時儲存為更新檔(patch),放在”.git/rebase”目錄中,然後将目前分支更新到最新的分支尖端,最後把儲存的更新檔應用到分支上.

rebase的過程中,也許會出現沖突,Git會停止rebase并讓你解決沖突,在解決完沖突之後,用git add去更新這些内容,然後無需執行commit,隻需要:

git rebase --continue就會繼續打餘下的更新檔.

git rebase --abort将會終止rebase,目前分支将會回到rebase之前的狀态.

14、git push

git push [alias] [branch]

git push origin master

将會把目前分支merge到alias上的[branch]分支.如果分支已經存在,将會更新,如果不存在,将會添加這個分支.

如果有多個人向同一個remote repo push代碼, Git會首先在你試圖push的分支上運作git log,檢查它的曆史中是否能看到server上的branch現在的tip,如果本地曆史中不能看到server的tip,說明本地的代碼不是最新的,Git會拒絕你的push,讓你先fetch,merge,之後再push,這樣就保證了所有人的改動都會被考慮進來.

15、關于切分支的異常處理

fatal: unable to stat 'node_modules/gulp-connect/node_modules/gulp-util/node_modules/dateformat/node_modules/meow/node_modules/normalize-package-data/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/parser.generated.js': Filename too long

git config --system core.longpaths true

也可以僅設定目前項目:

git config core.longpaths true

檢視設定狀态:

git config core.longpaths

16、git checkout -b (創分支)

git checkout -b [分支名稱]

git branch[分支名稱] 切換到該分支

git pull #git會提示我們相應的操作指令(如圖五所示)

git branch --set-upstream-to=origin/<branch> ANTM0253544_20171103_bkloansceneprod

git branch --set-upstream-to=origin/ANTM0253544_20171103_bkloansceneprod ANTM0253544 _20171103_bkloansceneprod

git常用指令

圖五