一、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目錄而言.

圖一
3、git log(show commit history of a branch)
檢視送出的曆史記錄
注意:在開發過程中多人修改同一個檔案很常見,是以可以通過此指令檢視修改資訊記錄
圖二
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 stash apply:取出stash中的上一個項目(stash@{0}),并且應用于目前的工作目錄.
圖四
也可以指定别的項目,比如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
圖五