git經常使用命令
- git不會上傳空文件夾,因此通常咱們爲了保持文件夾能正常上傳,會在文件夾內建立一個
.gitkeep
(保持git上傳,意思是這個文件夾我要提交上去)的文件來保證文件夾被上傳上去。
- 在遠端倉庫fork別人的代碼就至關於複製一份到本身的倉庫,你的修改並不會影響被fork的代碼。好處在於我修改fork的代碼就有權利提交過去,他們就能接到通知,只要那邊審覈經過,能夠將我修改的代碼合併到對方的代碼中去(作開源項目經常使用)。
- 在git服務端同樣有本地端類似的命令,能夠提交給被fork的人的項目中去。
$ git <命令> --help ## 打開對應命令的離線文檔,列出來的很詳細
$ git <命令> -h ## 查看當前命令的用法,列出經常使用的,不詳細
$ git init ## 初始化文件目錄爲git所管理,會建立一個.git目錄,存儲git管理的基本信息。
$ git status ## 查看git管理文件的狀態。status命令會常用,它能提示你不少信息,須要注意觀察。
On branch test ## 當前所在的分支
Your branch is behind 'origin/test' by 1 commit, and can be fast-forwarded.## 提示當前分支有一處提交(來着origin遠端倉庫)
## 下面的提示信息是提示你接下來能夠用哪些命令
(use "git pull" to update your local branch) ## 提示拉取遠端倉庫信息到本地
Changes not staged for commit: ## 提示不去提交或者提交文件該如何去操做
(use "git add <file>..." to update what will be committed) ## 去添加文件
(use "git checkout -- <file>..." to discard changes in working directory) ## 去還原文件
## 下面信息爲修改了哪些文件......
modified: app/.eslintrc
modified: build/config/webpack.path.js
modified: client/.eslintrc
$ git checkout -- <file> ## 修改後還未提交值暫緩區(未 add)。可使用通配符(撤消後沒法在找回數據)。
$ git add . ## add只是添加到了 暫存區。
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory.
## LF表示換行符號,CRLF是Carriage-Return Line-Feed的縮寫,意思是回車換行,就是回車(CR, ASCII 13, \r) 換行(LF, ASCII 10, \n)。換行在有的ASCII碼錶也用newline(簡nl)來進行表示,這裏的lf是line feed的概念,意思是同樣的。 將LF格式的替換成CRLF格式的。
$ git add <文件|文件夾>
$ git rm --cached <file> ## 將add進 暫存區 的文件給移除掉。(不經常使用)
$ git rm --cached .
fatal: not removing '.' recursively without -r ## 提示失敗,這裏提示的是若是先批量刪除須要追加一個 -r ,以下:
$ git rm --cached . -r ## 表示遞歸刪除全部
$ git commit -m '消息' ## 提交至本地 git 的版本庫中,若是不加-m消息的話,會用vi編輯器提醒你去寫入一個消息,若是不寫入會中斷這次的提交(空的字符串也會被中斷)。 commit後會被添加到 Git 倉庫。 填寫好消息(-m)有利於後期代碼回滾/維護/找回
## 若是以前文件 add 過一次,再次修改工做區的文件想直接跳過 add 的操做能夠以下:
$ git commit -a -m "消息" ## 此命令只會提交以前add的文件,沒有被add的文件不會提交到本地的git倉庫中去。
## 比較暴力的覆蓋,表示會將暫存區和工做區的文件都給覆蓋掉。
$ git reset HEAD <file> ## 撤銷指定提交的文件。(經常使用, add/commit後均可以使用,commit後須要指定 版本號)
$ git reset --hard <commit 版本號> ## 將本地git倉庫中的文件還原到指定的commit提交的位置,commit 版本號 沒必要複製完整 7~10位便可。能夠撤回某一個提交節點也能夠恢復至當前。reset後本地的commit日誌也會被回滾到還原的位置。 --hard表示堅定的意思。
HEAD is now at 71befda 提交數據 ## 提示信息爲當前已經到了 某個commit提交的位置,再看文件也是那一次提交的數據信息。
$ git reset --hard HEAD^ ## 根據頭信息往上一步回滾。回到上一次記錄
$ git reflog ## 能夠打印出全部的日誌,包括移動的,刪除的,能夠採用這個來回到reset以後不能回到的節點。這個記錄也僅僅只是被操做後的記錄信息。第一個記錄的是 版本 號,依然可使用 git reset --hard <版本號> 回滾到以前的某一步操做
71befda HEAD@{0}: reset: moving to 71befdabfa048d
72f5d07 HEAD@{1}: reset: moving to 72f5d07ce7cda17dd
71befda HEAD@{2}: reset: moving to 71befdabfa048d
72f5d07 HEAD@{3}: commit: 第三次
058df75 HEAD@{4}: commit: 測試diff
71befda ## 第一個爲 版本號
HEAD@{5}: commit (initial): 提交數據 ## HEAD表示頭信息 操做順序(最後操做的排在最前面)和操做命令以及相關信息。
$ git log <|commit 版本號> ## 越後提交,排在最前面,若是傳入commit 版本號 則會查找出指定的commit 版本號 的內容。
commit 71befdabfa048ddd21e4e16631a8271a13ed7fd0 ## 提交的commit 版本號,能夠用在後面的恢復等操做
Author: xxx <xxxxx@xxx.com> ## 提交的做者,這裏讀取的是全局配置的config文件中的信息
Date: Sat Jun 29 14:29:36 2019 +0800 ## 提交的時間
提交數據 ## commit 時輸入的信息 -m 後面輸入的信息。
## 注意:當log數據過多的時候會出現:(提示輸入命令),在鍵盤上按上下鍵表示翻頁。按q鍵表示退出。
$ git log --graph ## 顯示合併的圖譜
$ git diff <|文件> ## 添加 文件 則會對比指定文件,不添加則會遞歸對比。若是沒有修改則不會對比。默認對比的是工做區中的文件和暫存區的文件。
$ git diff <分支名> <|文件名> ## 和上面的規則同樣,此次比較的是本地的Git 倉庫上的文件
$ git diff origin/<分支名> <|文件名> ## 和上面的規則同樣,此次比較的是遠程Git 倉庫上的文件,origin表示 源頭,也就是服務器端的數據
$ git diff --cached <|文件> ## 和上面的規則同樣,此次比較的是拿暫存去和本地Git 倉庫去比較
$ git branch ## 查看分支,默認只顯示本地的分支,第一次建立只有當你commit以後纔會顯示分支信息
feature/a-dev-branch
master
* test ## * 表示當前的分支
$ git branch -a ## 查看全部的分支,包括遠端分支,遠端分支的名稱是紅色字體顯示,本地分支是白色字體顯示。
$ git branch <分支名稱> ## 建立一個分支,從master分支上覆制一份到新建的分支上去,若是存在對應分支則會給出對應的提示。從commit的那一步操做開始分支和master纔沒有任何關係了(切換後commit的信息再也不另外一個分支上有了,當兩個分支沒有關係的時候修改後直接切換會提醒你先commi在切換,不然修改的文件會有被覆蓋的危險)。
$ git branch -D(-d) <分支名稱> ## 刪除指定的分支,不能在當前分支上刪除當前分支,須要切換到其餘分支再去刪除。
Deleted branch dev2 (was 72f5d07).
$ git checkout <分支名稱> ## 切換到對應的分支上。若是本地有新文件,新文件依然存在,若是有未提交的文件,則會提醒你有修改的文件,修改後的文件依然被帶到切換後的分支中去。
M 1.txt
Switched to branch 'dev2'
$ git checkout -b iss53 ## 先建立分支,並同時切換至該分支
Switched to a new branch 'iss53'
## 切換並指定遠程分支(遠程分支必須存在)
$ git checkout -b iss53 origin/分支名
Switched to a new branch 'iss53'
### 這至關於執行下面這兩條命令:
$ git branch iss53
$ git checkout iss53
$ git stash ## 表示把我當前寫完的代碼給暫存取來,經常使用在切換分支以前不想add/commit,可使用該命令暫時存儲起來(暫存後,文件會回滾到上一次,方便去作切換分支等操做)。
$ git stash -h ## 查看stash 全部可供選擇的參數
usage: git stash list [<options>] ## 顯示當前暫存的列表,暫存後纔會有list信息
or: git stash show [<stash>] ## 顯示當前暫存文件和目前文件的差別
or: git stash drop [-q|--quiet] [<stash>] ## 刪除list中的全部信息,也就是刪除暫存後的文件信息
or: git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>] ## 將暫存文件還原,應用回來。會刪除掉list列表中的記錄
or: git stash branch <branchname> [<stash>]
or: git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [<message>]]
or: git stash clear
$ git merge <分支名> ## 將指定的分支文件合併到當前分支上。
## 當合並衝突時,會提示你如何階級
$ git merge master
Auto-merging 1.js
CONFLICT (content): Merge conflict in 1.js ## 1.js中的合併衝突
Automatic merge failed; fix conflicts and then commit the result. ## 提示你去修復衝突的內容,修復完畢後去commit你修復後的文件(須要先 add 進緩衝區)。
#### 衝突後的文件
<<<<<<< HEAD ## 這裏表示你修改的部分(當前的分支)
var name = '測試帳號';
======= ## 這裏表示合併過來的master分支上的內容。====是分隔符。刪除掉其中一個便可,或者兩個都保留去掉<<<< >>>> 這些提示信息
var name = 'laoxu';
>>>>>>> master
#### 修改事後以下
var name = 'laoxu';
$ git remote -h ## 對遠程分支的配置及操做
usage: git remote [-v | --verbose] ## 查看配置的遠程,fetch表示可拉取的,push表示可推送的。
or: git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <name> <url> ## 添加遠程分支 須要起別名而後對應遠程的url地址
or: git remote rename <old> <new> ## 修改 remote 配置中的某一項別名
or: git remote remove|rm <name> ## 刪除對應別名的遠程分支(rm 是 remove的簡寫)
or: git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
or: git remote [-v | --verbose] show [-n] <name>
or: git remote prune [-n | --dry-run] <name>
or: git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
or: git remote set-branches [--add] <name> <branch>...
or: git remote get-url [--push] [--all] <name>
or: git remote set-url [--push] <name> <newurl> [<oldurl>]
or: git remote set-url --add <name> <newurl>
or: git remote set-url --delete <name> <url>
-v, --verbose be verbose; must be placed before a subcommand
$ git push origin <分支> ## origin 是上一步remote遠程配置的別名對應遠程url。表示推向遠程某url上的某一個分支上面去。
## 若是你在push提交的時候,遠程倉庫提交的commit次數(指針)始終比你本地的多,那麼就回提醒你提交失敗,並讓你先作pull的操做。
$ git clone <url項目地址> <|項目別名> ## 把遠程代碼克隆都本地,默認狀況下項目的名字就是遠程分支上的名稱。
$ git fetch -h ## 取的git遠程倉庫中的分支
usage: git fetch [<options>] [<repository> [<refspec>...]]
or: git fetch [<options>] <group>
or: git fetch --multiple [<options>] [(<repository> | <group>)...]
or: git fetch --all [<options>]