配置
首先是配置帳號資訊
ssh -T git@github.com#登陸github
修改專案中的個人資訊
git config –global user.name “githelper”
git config –global user.email githelper@gmail.com
config
git config –global user.name JSLite#設定提交使用者名稱
git config –global user.email JSLite@yeah.net#設定提交郵箱
git config –list#檢視配置的資訊
git remote remove origin#刪除該遠端路徑
git remote add origin git@jslite.github.com:JSLite/JSLite.git#新增遠端路徑
help
git help config#獲取幫助資訊
配置自動換行(自動轉換坑太大)
git config –global core.autocrlf input#提交到git是自動將換行符轉換為lf
配置金鑰
ssh-keygen -t rsa -C JSLite@yeah.net#生成金鑰
ssh -T git@github.com#測試是否成功
多賬號ssh配置
1.生成指定名字的金鑰
ssh-keygen -t rsa -C “郵箱地址” -f ~/.ssh/github_jslite
會生成github_jslite和github_jslite.pub這兩個檔案
2.金鑰複製到託管平臺上
vim ~/.ssh/github_jslite.pub
開啟公鑰檔案github_jslite.pub,並把內容複製至程式碼託管平臺上
3.修改config檔案
vim ~/.ssh/config#修改config檔案,如果沒有建立config
Host jslite.github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_jslite
Host abc.github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_abc
4.測試
ssh -T git@jslite.github.com#@後面跟上定義的Host
push
git push origin master
git push -f origin master#強制推送
縮寫 -f
全寫–force
注:強制推送檔案沒有了哦
pull
只能拉取origin裡的一個url地址,這個fetch-url
預設為你新增的到origin的第一個地址
git pull origin master
git pull –all#獲取遠端所有內容包括tag
git pull origin next:master#取回origin主機的next分支,與本地的master分支合併
git pull origin next#遠端分支是與當前分支合併
上面一條命令等同於下面兩條命令
git fetch origin
git merge origin/next
如果遠端主機刪除了某個分支,預設情況下,git pull 不會在拉取遠端分支的時候,刪除對應的本地分支。這是為了防止,由於其他人操作了遠端主機,導致git pull不知不覺刪除了本地分支。
但是,你可以改變這個行為,加上引數 -p 就會在本地刪除遠端已經刪除的分支。
$ git pull -p
等同於下面的命令
$ git fetch –prune origin
$ git fetch -p
新建倉庫
init
git init#初始化
status
git status#獲取狀態
add
git add file#.或*代表全部新增
git rm –cached 在commit之前撤銷git add操作
git reset head好像比上面git rm –cached更方便
commit
git commit -m “message”#此處注意亂碼
remote
git remote add origin git@github.com:JSLite/test.git#新增源
push
git push -u origin master#push同事設定預設跟蹤分支
git push origin master
從現有倉庫克隆
git clone git://github.com/JSLite/JSLite.js.git
git clone git://github.com/JSLite/JSLite.js.git mypro#克隆到自定義資料夾
git clone [user@]example.com:path/to/repo.git/#SSH協議還有另一種寫法。
git clone支援多種協議,除了HTTP(s)以外,還支援SSH、Git、本地檔案協議等,下面是一些例子。$ git clone <版本庫的網址> <本地目錄名>
$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/
submodule
git submodule add –force 倉庫地址 路徑
其中,倉庫地址是指子模組倉庫地址,路徑指將子模組放置在當前工程下的路徑。
注意:路徑不能以 / 結尾(會造成修改不生效)、不能是現有工程已有的目錄(不能順利 Clone)
git submodule init初始化submodule
git submodule update更新submodule(必須在根目錄執行命令)
當使用git clone下來的工程中帶有submodule時,初始的時候,submodule的內容並不會自動下載下來的,此時,只需執行如下命令:
git submodule update –init –recursive下載的工程帶有submodule
git submodule foreach git pullsubmodule 裡有其他的 submodule 一次更新
git submodule foreach git pull origin mastersubmodule更新
git submodule foreach –recursive git submodule init
git submodule foreach –recursive git submodule update
本地
add
git add *#跟蹤新檔案
git add -u [path]#新增[指定路徑下]已跟蹤檔案
rm
rm &git rm #移除檔案
git rm -f *#移除檔案
git rm –cached *#取消跟蹤
git mv file_from file_to#重新命名跟蹤檔案
git log#檢視提交記錄
commit
git commit#提交更新
git commit -m `message`#提交說明
git commit -a#跳過使用暫存區域,把所有已經跟蹤過的檔案暫存起來一併提交
git commit –amend#修改最後一次提交
git commit log#檢視所有提交,包括沒有push的commit
git commit -m “#133″#關聯issue 任意位置帶上#符號加上issue號碼
git commit -m “fix #133″commit關閉issue
git commit -m `概要描述`$`“1.詳細描述`$`n“2.詳細描述`#提交簡要描述和詳細描述
reset
git reset HEAD*#取消已經暫存的檔案
git reset –mixed HEAD*#同上
git reset –soft HEAD*#重置到指定狀態,不會修改索引區和工作樹
git reset –hard HEAD*#重置到指定狀態,會修改索引區和工作樹
git reset — files*#重置index區檔案
revert
git revert HEAD#撤銷前一次操作
git revert HEAD~#撤銷前前一次操作
git revert commit##撤銷指定操作
checkout
git checkout — file#取消對檔案的修改(從暫存區——覆蓋worktree file)
git checkout branch|tag|commit — file_name#從倉庫取出file覆蓋當前分支
git checkout HEAD~1 [檔案]#將會更新 working directory 去匹配某次 commit
git checkout — .#從暫存區取出檔案覆蓋工作區
git checkout -b gh-pages 0c304c9這個表示 從當前分支 commit 雜湊值為 0c304c9 的節點,分一個新的分支gh-pages出來,並切換到 gh-pages
diff
git diff file#檢視指定檔案的差異
git diff –stat#檢視簡單的diff結果
git diff#比較Worktree和Index之間的差異
git diff –cached#比較Index和HEAD之間的差異
git diff HEAD#比較Worktree和HEAD之間的差異
git diff branch#比較Worktree和branch之間的差異
git diff branch1 branch2#比較兩次分支之間的差異
git diff commit commit#比較兩次提交之間的差異
$ git diff master..test#上面這條命令只顯示兩個分支間的差異
git diff master…test#你想找出`master`,`test`的共有 父分支和`test`分支之間的差異,你用3個`.`來取代前面的兩個`.`
stash
git stash#將工作區現場(已跟蹤檔案)儲藏起來,等以後恢復後繼續工作。
git stash list#檢視儲存的工作現場
git stash apply#恢復工作現場
git stash drop#刪除stash內容
git stash pop#恢復的同時直接刪除stash內容
git stash apply stash@{0}#恢復指定的工作現場,當你儲存了不只一份工作現場時。
merge
git merge –squash test##合併壓縮,將test上的commit壓縮為一條
cherry-pick
git cherry-pick commit#揀選合併,將commit合併到當前分支
git cherry-pick -n commit#揀選多個提交,合併完後可以繼續揀選下一個提交
rebase
git rebase master#將master分之上超前的提交,變基到當前分支
git rebase –onto master 169a6#限制回滾範圍,rebase當前分支從169a6以後的提交
git rebase –interactive#互動模式,修改commit
git rebase –continue#處理完衝突繼續合併
git rebase –skip#跳過
git rebase –abort#取消合併
分支branch
刪除
git push origin :branchName#刪除遠端分支
git push origin –delete new#刪除遠端分支new
git branch -d branchName#刪除本地分支,強制刪除用-D
git branch -d test#刪除本地test分支
git branch -D test#強制刪除本地test分支
提交
git push -u origin branchName#提交分支到遠端origin主機中
拉取
git fetch -p#拉取遠端分支時,自動清理 遠端分支已刪除,本地還存在的對應同名分支。
分支合併
git merge branchName#合併分支 – 將分支branchName和當前所在分支合併
git merge origin/master#在本地分支上合併遠端分支。
git rebase origin/master#在本地分支上合併遠端分支。
git merge test#將test分支合併到當前分支
重新命名
git branch -m old new#重新命名分支
檢視
git branch#列出本地分支
git branch -r#列出遠端分支
git branch -a#列出所有分支
git branch -v#檢視各個分支最後一個提交物件的資訊
git branch –merge#檢視已經合併到當前分支的分支
git branch –no-merge#檢視為合併到當前分支的分支
新建
git branch test#新建test分支
git checkout -b newBrach origin/master#取回遠端主機的更新以後,在它的基礎上建立一個新的分支
連線
git branch –set-upstream dev origin/dev#將本地dev分支與遠端dev分支之間建立連結
git branch –set-upstream master origin/next#手動建立追蹤關係
分支切換
git checkout test#切換到test分支
git checkout -b test#新建+切換到test分支
git checkout -b test dev#基於dev新建test分支,並切換
遠端
git fetch <遠端主機名> <分支名>#fetch取回所有分支(branch)的更新
git fetch origin remotebranch[:localbranch]# 從遠端拉去分支[到本地指定分支]
git merge origin/branch#合併遠端上指定分支
git pull origin remotebranch:localbranch# 拉去遠端分支到本地分支
git push origin branch#將當前分支,推送到遠端上指定分支
git push origin localbranch:remotebranch#推送本地指定分支,到遠端上指定分支
git push origin :remotebranch#刪除遠端指定分支
git checkout -b [–track] test origin/dev基於遠端dev分支,新建本地test分支[同時設定跟蹤]
撤銷遠端記錄
git reset –hard HEAD~1#撤銷一條記錄
git push -f origin HEAD:master#同步到遠端倉庫
忽略檔案
echo node_modules/ >> .gitignore
刪除檔案
git rm -rf node_modules/
源remote
git是一個分散式程式碼管理工具,所以可以支援多個倉庫,在git裡,伺服器上的倉庫在本地稱之為remote。
個人開發時,多源用的可能不多,但多源其實非常有用。
git remote add origin1 git@github.com:yanhaijing/data.js.git
git remote#顯示全部源
git remote -v#顯示全部源+詳細資訊
git remote rename origin1 origin2#重新命名
git remote rm origin#刪除
git remote show origin#檢視指定源的全部資訊