Workspace
:工做區Index / Stage
:暫存區Repository
:倉庫區(或本地倉庫)Remote
:遠程倉庫# 配置全局用戶
$ git config --global user.name "用戶名"
$ git config --global user.email "git帳號"
# 配置別名
$ git config --global alias.co checkout
$ git config --global alias.ss status
$ git config --global alias.cm commit
$ git config --global alias.br branch
$ git config --global alias.rg reflog
# 這裏只是美化 log 的輸出,實際使用時能夠在 git lg 後面加命令參數,如: git lg -10 顯示最近10條提交
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# 刪除全局配置
$ git config --global --unset alias.xxx
$ git config --global --unset user.xxx
複製代碼
# 查看系統配置
$ git config --list
# 查看用戶配置
$ cat ~/.gitconfig
# 查看當前項目的 git 配置
$ cat .git/config
# 查看暫存區的文件
$ git ls-files
# 查看本地 git 命令歷史
$ git reflog
# 查看全部 git 命令
$ git --help -a
# 查看當前 HEAD 指向
$ cat .git/HEAD
# git 中 D 向下翻一行 F 向下翻頁 B 向上翻頁 Q 退出
# 查看提交歷史
$ git log --oneline
--grep="關鍵字"
--graph
--all
--author "username"
--reverse
-num
-p
--before= 1 day/1 week/1 "2019-06-06"
--after= "2019-06-06"
--stat
--abbrev-commit
--pretty=format:"xxx"
# oneline -> 將日誌記錄一行一行的顯示
# grep="關鍵字" -> 查找日誌記錄中(commit提交時的註釋)與關鍵字有關的記錄
# graph -> 記錄圖形化顯示 !!!
# all -> 將全部記錄都詳細的顯示出來
# author "username" -> 查找這個做者提交的記錄
# reverse -> commit 提交記錄順序翻轉
# before -> 查找規定的時間(如:1天/1周)以前的記錄
# num -> git log -10 顯示最近10次提交 !!!
# stat -> 顯示每次更新的文件修改統計信息,會列出具體文件列表 !!!
# abbrev-commit -> 僅顯示 SHA-1 的前幾個字符,而非全部的 40 個字符 !!!
# pretty=format:"xxx" -> 能夠定製要顯示的記錄格式 !!!
# p -> 顯示每次提交所引入的差別(按 補丁 的格式輸出)!!!
複製代碼
HEAD
指向發生改變的時間列表。在你切換分支、用 git commit
進行提交、以及用 git reset
撤銷 commit 時,HEAD
指向會改變,但當你進行 git checkout -- <filename>
撤銷或者 git stash
存儲文件等操做時,HEAD
並不會改變,這些修改歷來沒有被提交過,所以 reflog
也沒法幫助咱們恢復它們。git reflog
不會永遠保持,Git 會按期清理那些 「用不到的」 對象,不要期望幾個月前的提交還一直在那裏。符號解釋:html
* 表示一個 commit
| 表示分支前進
/ 表示分叉
\ 表示合入
|/ 表示新分支
複製代碼
# 查看工做區和暫存區的狀態
$ git status
# 將工做區的文件提交到暫存區
$ git add .
# 提交到本地倉庫
$ git commit -m "本次提交說明"
# add和commit的合併,便捷寫法(未追蹤的文件沒法直接提交到暫存區/本地倉庫)
$ git commit -am "本次提交說明"
# 將本地分支和遠程分支進行關聯
$ git push -u origin branchName
# 將本地倉庫的文件推送到遠程分支
$ git push
# 拉取遠程分支的代碼
$ git pull origin branchName
# 合併分支
$ git merge branchName
# 查看本地擁有哪些分支
$ git branch
# 查看全部分支(包括遠程分支和本地分支)
$ git branch -a
# 切換分支
$ git checkout branchName
# 臨時將工做區文件的修改保存至堆棧中
$ git stash
# 將以前保存至堆棧中的文件取出來
$ git stash pop
複製代碼
將工做區的文件添加到暫存區node
# 添加指定文件到暫存區(追蹤新增的指定文件)
$ git add [file1] [file2] ...
# 添加指定目錄到暫存區,包括子目錄
$ git add [dir]
# 添加當前目錄的全部文件到暫存區(追蹤全部新增的文件)
$ git add .
# 刪除工做區/暫存區的文件
$ git rm [file1] [file2] ...
# 中止追蹤指定文件,但該文件會保留在工做區
$ git rm --cached [file]
# 更名工做區/暫存區的文件
$ git mv [file-original] [file-renamed]
# Git 2.0 如下版本
#只做用於文件的新增和修改
$ git add .
#只做用於文件的修改和刪除
$ gti add -u
#做用於文件的增刪改
$ git add -A
# Git 2.0 版本
$ git add . 等價於 $ git add -A
複製代碼
git add .
:操做的對象是「當前目錄」全部文件變動,"." 表示當前目錄。會監控工做區的狀態樹,使用它會把工做區的全部變化提交到暫存區,包括文件內容修改(modified
)以及新文件(new
),但不包括被刪除的文件。git add -u
:操做的對象是整個工做區已經跟蹤的文件變動,不管當前位於哪一個目錄下。僅監控已經被 add 的文件(即 tracked file
),它會將被修改的文件(包括文件刪除)提交到暫存區。git add -u
不會提交新文件(untracked file
)。(git add --update
的縮寫)git add -A
:操做的對象是「整個工做區」全部文件的變動,不管當前位於哪一個目錄下。是上面兩個功能的合集(git add --all
的縮寫)。# 查看工做區和暫存區的狀態
$ git status
複製代碼
# 將暫存區的文件提交到本地倉庫並添加提交說明
$ git commit -m "本次提交的說明"
# add 和 commit 的合併,便捷寫法
# 和 git add -u 命令同樣,未跟蹤的文件是沒法提交上去的
$ git commit -am "本次提交的說明"
# 跳過驗證繼續提交
$ git commit --no-verify
$ git commit -n
# 編輯器會彈出上一次提交的信息,能夠在這裏修改提交信息
$ git commit --amend
# 修復提交,同時修改提交信息
$ git commit --amend -m "本次提交的說明"
# 加入 --no-edit 標記會修復提交但不修改提交信息,編輯器不會彈出上一次提交的信息
$ git commit --amend --no-edit
複製代碼
git commit --amend
既能夠修改上次提交的文件內容,也能夠修改上次提交的說明。會用一個新的 commit
更新並替換最近一次提交的 commit
。若是暫存區有內容,這個新的 commit
會把任何修改內容和上一個 commit
的內容結合起來。若是暫存區沒有內容,那麼這個操做就只會把上次的 commit
消息重寫一遍。永遠不要修復一個已經推送到公共倉庫中的提交,會拒絕推送到倉庫# 將本地倉庫的文件推送到遠程分支
# 若是遠程倉庫沒有這個分支,會新建一個同名的遠程分支
# 若是省略遠程分支名,則表示二者同名
$ git push <遠程主機名> <本地分支名>:<遠程分支名>
$ git push origin branchname
# 若是省略本地分支名,則表示刪除指定的遠程分支
# 由於這等同於推送一個空的本地分支到遠程分支。
$ git push origin :master
# 等同於
$ git push origin --delete master
# 創建當前分支和遠程分支的追蹤關係
$ git push -u origin master
# 若是當前分支與遠程分支之間存在追蹤關係
# 則能夠省略分支和 -u
$ git push
# 無論是否存在對應的遠程分支,將本地的全部分支都推送到遠程主機
$ git push --all origin
# 拉取全部遠程分支到本地鏡像倉庫中
$ git pull
# 拉取併合並項目其餘人員的一個分支
$ git pull origin branchname
# 等同於 fetch + merge
$ git fetch origin branchName
$ git merge origin/branchName
# 若是遠程主機的版本比本地版本更新,推送時 Git 會報錯,要求先在本地作 git pull 合併差別,
# 而後再推送到遠程主機。這時,若是你必定要推送,可使用 –-force 選項
# (儘可能避免使用)
$ git push --force origin | git push -f origin
複製代碼
# 查看本地分支
$ git branch | git branch -l
# 查看遠程分支
$ git branch -r
# 查看全部分支(本地分支+遠程分支)
$ git branch -a
# 查看全部分支並帶上最新的提交信息
$ git branch -av
# 查看本地分支對應的遠程分支
$ git branch -vv
# 新建分支
# 在別的分支下新建一個分支,新分支會複製當前分支的內容
# 注意:若是當前分支有修改,可是沒有提交到倉庫,此時修改的內容是不會被複制到新分支的
$ git branch branchname
# 切換分支(切換分支時,本地工做區,倉庫都會相應切換到對應分支的內容)
$ git checkout branchname
# 建立一個 aaa 分支,並切換到該分支 (新建分支和切換分支的簡寫)
$ git checkout -b aaa
# 能夠看作是基於 master 分支建立一個 aaa 分支,並切換到該分支
$ git checkout -b aaa master
# 新建一條空分支(詳情請看問題列表)
$ git checkout --orphan emptyBranchName
$ git rm -rf .
# 刪除本地分支,會阻止刪除包含未合併更改的分支
$ git brnach -d branchname
# 強制刪除一個本地分支,即便包含未合併更改的分支
$ git branch -D branchname
# 刪除遠程分支
# 推送一個空分支到遠程分支,其實就至關於刪除遠程分支
$ git push origin :遠程分支名
# 或者
$ git push origin --delete 遠程分支名
# 修改當前分支名
$ git branch -m branchname
複製代碼
# 默認 fast-forward ,HEAD 指針直接指向被合併的分支
$ git merge
# 禁止快進式合併
$ git merge --no-ff
$ git merge --squash
複製代碼
fast-forward
:會在當前分支的提交歷史中添加進被合併分支的提交歷史(得先理解何時會發生快速合併,並非每次 merge 都會發生快速合併);--no-ff
:會生成一個新的提交,讓當前分支的提交歷史不會那麼亂;--squash
:不會生成新的提交,會將被合併分支屢次提交的內容直接存到工做區和暫存區,由開發者手動去提交,這樣當前分支最終只會多出一條提交記錄,不會摻雜被合併分支的提交歷史www.liaoxuefeng.com/wiki/896043…git
git-scm.com/book/zh/v2/…github
www.jianshu.com/p/4a8f4af4e…shell
No local changes to save
,沒法將修改保存到堆棧中使用場景: 當你接到一個修復緊急 bug 的任務時候,通常都是先建立一個新的 bug 分支來修復它,而後合併,最後刪除。可是,若是當前你正在開發功能中,短期還沒法完成,沒法直接提交到倉庫,這時候能夠先把當前工做區的內容 git stash
一下,而後去修復 bug,修復後,再 git stash pop
,恢復以前的工做內容。npm
# 將全部未提交的修改(提交到暫存區)保存至堆棧中
$ git stash
# 給本次存儲加個備註,以防時間久了忘了
$ git stash save "存儲"
# 存儲未追蹤的文件
$ git stash -u
# 查看存儲記錄
$ git stash list
在 Windows 上和 PowerShell 中,須要加雙引號
# 恢復後,stash 記錄並不刪除
$ git stash apply "stash@{index}"
# 恢復的同時把 stash 記錄也刪了
$ git stash pop "stash@{index}"
# 刪除 stash 記錄
$ git stash drop "stash@{index}"
# 刪除全部存儲的進度
$ git stash clear
# 查看當前記錄中修改了哪些文件
$ git stash show "stash@{index}"
# 查看當前記錄中修改了哪些文件的內容
$ git stash show -p "stash@{index}"
複製代碼
# 查看工做區和暫存區單個文件的對比
$ git diff filename
# 查看工做區和暫存區全部文件的對比
$ git diff
# 查看工做區和暫存區全部文件的對比,並顯示出全部有差別的文件列表
$ git diff --stat
# 注意:
# 1.你修改了某個文件,可是沒有提交到暫存區,這時候會有對比的內容
# 一旦提交到暫存區,就不會有對比的內容(由於暫存區已經更新)
# 2.若是你新建了一個文件,可是沒有提交到暫存區,這時候 diff 是沒有結果的
# 查看暫存區與上次提交到本地倉庫的快照(即最新提交到本地倉庫的快照)的對比
$ git diff --cached/--staged
# 查看工做區與上次提交到本地倉庫的快照(即最新提交到本地倉庫的快照)的對比
$ git diff branchname
# 查看工做區與 HEAD 指向(默認當前分支最新的提交)的對比
$ git diff HEAD
# 查看兩個本地分支中某一個文件的對比
$ git diff branchname..branchname filename
# 查看兩個本地分支全部的對比
$ git diff branchname..branchname
# 查看遠程分支和本地分支的對比
$ git diff origin/branchname..branchname
# 查看遠程分支和遠程分支的對比
$ git diff origin/branchname..origin/branchname
# 查看兩個 commit 的對比
$ git diff commit1..commit2
複製代碼
# 查看全部遠程主機
$ git remote
# 查看關聯的遠程倉庫的詳細信息
$ git remote -v
# 刪除遠程倉庫的 「關聯」
$ git remote rm projectname
# 設置遠程倉庫的 「關聯」
$ git remote set-url origin <newurl>
複製代碼
經常使用於發佈版本json
www.liaoxuefeng.com/wiki/896043…vim
# 默認在 HEAD 上建立一個標籤
$ git tag v1.0
# 指定一個 commit id 建立一個標籤
$ git tag v0.9 f52c633
# 建立帶有說明的標籤,用 -a 指定標籤名,-m 指定說明文字
$ git tag -a v0.1 -m "version 0.1 released"
# 查看全部標籤
# 注意:標籤不是按時間順序列出,而是按字母排序的。
$ git tag
# 查看單個標籤具體信息
$ git show <tagname>
# 推送一個本地標籤
$ git push origin <tagname>
# 推送所有未推送過的本地標籤
$ git push origin --tags
# 刪除本地標籤
# 由於建立的標籤都只存儲在本地,不會自動推送到遠程。
# 因此,打錯的標籤能夠在本地安全刪除。
$ git tag -d v0.1
# 刪除一個遠程標籤(先刪除本地 tag ,而後再刪除遠程 tag)
$ git push origin :refs/tags/<tagname>
複製代碼
# 刪除暫存區和工做區的文件
$ git rm filename
# 只刪除暫存區的文件,不會刪除工做區的文件
$ git rm --cached filename
複製代碼
若是在配置 .gitignore 文件以前就把某個文件上傳到遠程倉庫了,這時候想把遠程倉庫中的該文件刪除,此時你配置 .gitignore 文件也沒有用,由於該文件已經被追蹤了,但又不想在本地刪除該文件後再從新提交到遠程倉庫,這時候可使用 git rm --cached filename
命令取消該文件的追蹤,這樣下次提交的時候,git 就不會再提交這個文件,從而遠程倉庫的該文件也會被刪除segmentfault
# 恢復暫存區的指定文件到工做區
$ git checkout <filename>
# 恢復暫存區的全部文件到工做區
$ git checkout .
# 回滾到最近的一次提交
# 若是修改某些文件後,沒有提交到暫存區,此時的回滾是回滾到上一次提交
# 若是是已經將修改的文件提交到倉庫了,這時再用這個命令回滾無效
# 由於回滾到的是以前本身修改後提交的版本
$ git checkout HEAD
$ git checkout HEAD -- filename
# 回滾到最近一次提交的上一個版本
$ git checkout HEAD^
# 回滾到最近一次提交的上2個版本
$ git checkout HEAD^^
# 切換分支,在這裏也能夠看作是回到項目「當前」狀態的方式
$ git checkout <當前你正在使用的分支>
# 切換到某個指定的 commit 版本
$ git checkout <commit_id>
# 切換指定 tag
$ git checkout <tag>
複製代碼
HEAD
通常指向 master 或是其餘的本地分支,但當你使用 git checkout <commit id>
切換到指定的某一次提交的時候,HEAD
就再也不指向一個分支了——它直接指向一個提交,HEAD 就會處於 detached 狀態(遊離狀態)。git checkout branchName
回到項目初始的狀態(這時候會提示你是否須要新建一條分支用於保留剛纔的修改)。git reset [--hard|soft|mixed|merge|keep] [<commit>或HEAD]
:將當前的分支重設(reset
)到指定的 <commit>
或者 HEAD
(默認,若是不顯示指定 <commit>
,默認是 HEAD
,即最新的一次提交),而且根據 [mode]
有可能更新索引和工做目錄。mode
的取值能夠是 hard
、soft
、mixed
、merged
、keep
。
# 從暫存區撤銷特定文件,但不改變工做區。它會取消這個文件的暫存,而不覆蓋任何更改
$ git reset <fileName>
# 重置暫存區最近的一次提交,但工做區的文件不變
$ git reset
# 等價於
$ git reset HEAD (默認)
# 重置暫存區與工做區,回退到最近一次提交的版本內容
$ git reset --hard
# 重置暫存區與工做區,回退到最近一次提交的上一個版本
$ git reset --hard HEAD^
# 將當前分支的指針指向爲指定 commit(該提交以後的提交都會被移除),同時重置暫存區,但工做區不變
$ git reset <commit>
# 等價於
$ git reset --mixed <commit>
# 將當前分支的指針指向爲指定 commit(該提交以後的提交都會被移除),但保持暫存區和工做區不變
$ git reset --soft <commit>
# 將當前分支的指針指向爲指定 commit(該提交以後的提交都會被移除),同時重置暫存區、工做區
$ git reset --hard <commit>
複製代碼
git reset
有不少種用法。它能夠被用來移除提交快照,儘管它一般被用來撤銷暫存區和工做區的修改。無論是哪一種狀況,它應該只被用於本地修改——你永遠不該該重設和其餘開發者共享的快照。咱們能夠用 git reflog
查看歷史命令,這樣就能夠看到以前新版本的 commit_id ,而後 git reset --hard commit_id
就能夠回到以前的新版本代碼
# 生成一個撤銷最近的一次提交的新提交
$ git revert HEAD
# 生成一個撤銷最近一次提交的上一次提交的新提交
$ git revert HEAD^
# 生成一個撤銷最近一次提交的上兩次提交的新提交
$ git revert HEAD^^
# 生成一個撤銷最近一次提交的上n次提交的新提交
$ git revert HEAD~num
# 生成一個撤銷指定提交版本的新提交
$ git revert <commit_id>
# 生成一個撤銷指定提交版本的新提交,執行時不打開默認編輯器,直接使用 Git 自動生成的提交信息
$ git revert <commit_id> --no-edit
複製代碼
git revert
命令用來撤銷某個已經提交的快照(和 reset 重置到某個指定版本不同)。它是在提交記錄最後面加上一個撤銷了更改的新提交,而不是從項目歷史中移除這個提交,這避免了 Git 丟失項目歷史。
撤銷(revert)應該用在你想要在項目歷史中移除某個提交的時候。好比說,你在追蹤一個 bug,而後你發現它是由一個提交形成的,這時候撤銷就頗有用。
撤銷(revert)被設計爲撤銷公共提交的安全方式,重設(reset)被設計爲重設本地更改。
由於兩個命令的目的不一樣,它們的實現也不同:重設徹底地移除了一堆更改,而撤銷保留了原來的更改,用一個新的提交來實現撤銷。千萬不要用 git reset
回退已經被推送到公共倉庫上的 提交,它只適用於回退本地修改(從未提交到公共倉庫中)。若是你須要修復一個公共提交,最好使用 git revert。
發佈一個提交以後,你必須假設其餘開發者會依賴於它。移除一個其餘團隊成員在上面繼續開發的提交在協做時會引起嚴重的問題。當他們試着和你的倉庫同步時,他們會發現項目歷史的一部分忽然消失了。一旦你在重設以後又增長了新的提交,Git 會認爲你的本地歷史已經和 origin/master 分叉了,同步你的倉庫時的合併提交(merge commit)會使你的同事困惑。
將指定的提交 commit 應用於當前分支(能夠用於恢復不當心撤銷(revert/reset)的提交)
$ git cherry-pick <commit_id>
$ git cherry-pick <commit_id> <commit_id>
$ git cherry-pick <commit_id>^..<commit_id>
複製代碼
有種狀況咱們常常會遇到:某個工做中的項目須要包含並使用另外一個項目。也許是第三方庫,或者你獨立開發的,用於多個父項目的庫。 如今問題來了:你想要把它們當作兩個獨立的項目,同時又想在一個項目中使用另外一個。若是將另一個項目中的代碼複製到本身的項目中,那麼你作的任何自定義修改都會使合併上游的改動變得困難。Git 經過子模塊來解決這個問題,容許你將一個 Git 倉庫做爲另外一個 Git 倉庫的子目錄。 它能讓你將另外一個倉庫克隆到本身的項目中,同時還保持提交的獨立。
# 在主項目中添加子項目,URL 爲子模塊的路徑,path 爲該子模塊存儲的目錄路徑
git submodule add [URL] [Path]
# 克隆含有子項目的主項目
git clone [URL]
# 當你在克隆這樣的項目時,默認會包含該子項目的目錄,但該目錄中尚未任何文件
# 初始化本地配置文件
git submodule init
# 從當前項目中抓取全部數據並檢出父項目中列出的合適的提交
git submodule update
# 等價於 git submodule init && git submodule update
git submodule update --init
# 自動初始化並更新倉庫中的每個子模塊, 包括可能存在的嵌套子模塊
git clone --recurse-submodules [URL]
複製代碼
# 初始化一個Git倉庫
$ git init
# 關聯遠程倉庫
$ git remote add <name> <git-repo-url>
# 例如
$ git remote add origin https://github.com/xxxxxx
複製代碼
# 新建好遠程倉庫,而後 clone 到本地
$ git clone <git-repo-url>
# 將遠程倉庫下載到(當前 git bash 啓動位置下面的)指定文件中,若是沒有會自動生成
$ git clone <git-repo-url> <project-name>
複製代碼
預發佈環境的做用: 預發佈環境是正式發佈前最後一次測試。由於在少數狀況下即便預發佈經過了,都不能保證正式生產環境能夠100%不出問題;預發佈環境的配置,數據庫等都是跟線上同樣;有些公司的預發佈環境數據庫是鏈接線上環境,有些公司預發佈環境是單獨的數據庫;若是不設預發佈環境,若是開發合併代碼有問題,會直接將問題發佈到線上,增長維護的成本。
pre-commit
就是在代碼提交以前作些東西,好比代碼打包,代碼檢測,稱之爲鉤子(hook)npm install pre-commit --save-dev
複製代碼
若是沒有在 .git->hooks
目錄下生成 pre-commit
文件的話,則要手工建立 node ./node_modules/pre-commit/install.js
"scripts": {
"build": "tsc",
"eslint": "eslint src --ext .ts",
"eslint:fix": "eslint src --ext .ts --fix"
},
//在提交代碼以前,先執行 scripts 中的 eslint 命令
"pre-commit": [
"eslint"
]
複製代碼
# 跳過驗證
$ git commit --no-verify
$ git commit -n
複製代碼
這時候能夠回滾代碼,從新拉取。
在 git 2.9.2 以後,不能夠合併無相同結點的分支(分支之間自倉庫創建後,歷來沒有過互相拉取合併)。若是須要合併兩個不一樣結點的分支,以下:
$ git pull origin branchName --allow-unrelated-histories
$ git merge branchName --allow-unrelated-histories
複製代碼
這個功能是可讓你們不要把倉庫上傳錯了,若是會加上這個代碼,那麼就是本身肯定了上傳。舊版本的 Git 很容易就把代碼傳錯了,如今能夠看到,若是上傳的不是以前的,那麼就須要加代碼上傳。 正常狀況下,都是先創建倉庫,而後切多個分支,分支先去拉取合併主分支的內容,而後再各自開發, 若是創建倉庫後,各個分支沒有區拉取主分支的代碼,以後各個分支之間想要合併時就會報錯。
error: merge is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
複製代碼
當遠程分支和本地分支發生衝突後,git 保持合併狀態,你若是沒有去解決完全部的衝突,那麼 git 會一直保持這個狀態,你就沒法再提交代碼。只有先解除合併狀態後,才能繼續提交。執行命令前最好先備份一下,有可能本地作的修改會被遠程分支覆蓋掉。
# 解除合併狀態
$ git merge --abort
複製代碼
# 刪除暫存區和工做區的文件
$ git rm filename
# 只刪除暫存區的文件,不會刪除工做區的文件
$ git rm --cached filename
複製代碼
若是在配置 .gitignore 文件以前就把某個文件上傳到遠程倉庫了,這時候想把遠程倉庫中的該文件刪除,此時你配置 .gitignore 文件也沒有用,由於該文件已經被追蹤了,但又不想在本地刪除該文件後再從新提交到遠程倉庫,這時候可使用 git rm --cached filename
命令取消該文件的追蹤,這樣下次提交的時候,git 就不會再提交這個文件,從而遠程倉庫的該文件也會被刪除
以前沒有進行過關聯,即沒有經過 clone 遠程項目到本地再開始作項目,而是先本地新建了一個項目,而後想傳到遠程倉庫上。
# 將本地倉庫和遠程倉庫關聯起來
$ git remote add origin 遠程倉庫地址
# 將本地的 master 分支推送到 origin 主機,同時指定 origin 爲默認主機
$ git push -u origin master
# 上面的命名執行後,下次再從本地庫上傳內容的時候只需下面這樣就能夠了
$ git push
複製代碼
www.liaoxuefeng.com/wiki/896043…
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
# Generating public/private rsa key pair...
# 三次回車便可生成 ssh key
複製代碼
cat ~/.ssh/id_rsa.pub
複製代碼
測試 ssh 是否可以鏈接成功
$ ssh -T git@github.com
複製代碼
使用 ssh 協議
$ git remote set-url origin git@xxx.com:xxx/xxx.git
複製代碼
通常爲 C:\users\Administrator,也能夠是你本身建立的系統用戶名目錄,文件名爲 .git-credentials。因爲在 Windows 中不容許直接建立以 "." 開頭的文件,因此用命令行建立該文件。
$ touch .git-credentials
$ echo "http://{username}:{password}@github.com" >> ~/.git-credentials
$ git config --global credential.helper store
複製代碼
能夠在當前目錄下,添加一個 .gitkeep 文件
git add .
沒法進行文件追蹤,可使用 git add -A
,這也就是每次提交前都要 git status
的緣由緣由在於 Git 在使用過程當中遭遇了奔潰,部分被上鎖資源沒有被釋放致使的。
解決方案: 進入項目文件夾下的 .git 文件中(顯示隱藏文件夾或 rm .git/index.lock
)刪除 index.lock 文件便可。
git commit -am "xxx"
只會將被 tracked 的文件添加到暫存區並提交,而將文件添加到 git 管理是要使用 git add 命令,將新的文件 tracked 。(新建了文件以後,idea 會提示你是否須要加到 git 管理中。選擇記住後,以後 idea 默認都會把新建的文件 tracked 化)
從合併後的代碼來看,結果都是同樣的,區別就在於 --no-ff
會讓 git 生成一個新的提交對象。爲何要這樣?一般咱們把 master 做爲主分支,上面存放的都是比較穩定的代碼,提交頻率也很低,而 feature 是用來開發特性的,上面會存在許多零碎的提交,快進式合併會把 feature 的提交歷史混入到 master 中,攪亂 master 的提交歷史。因此若是你根本不在乎提交歷史,也不愛管 master 乾不乾淨,那麼 --no-ff
其實沒什麼用。
# 試試
$ git -c core.pager=more log
# 若是能夠顯示中文的話,把 pager 設置爲 more
$ git config --global core.pager more
複製代碼
想要 merge 別人的分支時:
git add .
追蹤文件,那麼 git stash
是沒法存儲的$ git stash -u
複製代碼
可能出現的報錯:
remote: Permission to xxxxx.git denied to xxx. fatal: unable to access 'github.com/ xxxxx.git/': The requested URL returned error: 403
remote: You do not have permission to push to the repository via HTTPS
fatal: Authentication failed for 'gitee.com/xxx.git/'
# 查看當前項目的 git 配置
$ cat .git/config
複製代碼
git push
的數據協議有兩種方式:ssh
和 https
。若是不一致就須要切換 url
地址。remote: Coding 提示: Authentication failed.
remote: 認證失敗,請確認您輸入了正確的帳號密碼。
fatal: Authentication failed for 'https://e.coding.net/xxx.git/'
複製代碼
在控制面板裏找到憑據管理器,選中 Windows 憑據,找到 git 的憑據,點擊編輯,輸入所用 github 的正確用戶名和密碼。
可能你的項目名路徑中包含了中文名,須要替換成英文名
which git
,就會顯示 git 的安裝位置了where git
,就會顯示 git 的安裝路徑了git rebase -i
複製代碼
若是兩我的都對同一個文件重命名,此時會起衝突,git 不會自動處理,須要開發者自身去解決衝突
git revert -m 1
複製代碼
在 Git 中建立分支,是必須有一個父節點的,也就是說必須在已有的分支上來建立新的分支,若是工程已經進行了一段時間,這個時候是沒法建立空分支的。可是有時候就是須要建立一個空白的分支。
$ git checkout --orphan emptyBranchName
複製代碼
該命令會生成一個叫 emptybranch
的分支,該分支會包含父分支的全部文件。但新的分支不會指向任何之前的提交,就是它沒有歷史,若是你提交當前內容,那麼此次提交就是這個分支的首次提交。
想要空分支,因此須要把當前內容所有刪除,用 git 命令
$ git rm -rf . // 注意:最後的‘.’不能少。
複製代碼
先刪除該分支,而後再新建一個空的分支(分支名就是刪除的分支名)~~
傻傻分不清之 Cookie、Session、Token、JWT
Github API 調用 (v3)