衆衆衆衆衆所周知,github 是一個好東西。本篇就來講說 Git 的那些指令,網上已經有不少文章,本篇就本不知名小博主在使用過程當中用到的一些指令和問題來記錄和說明。若是對你有幫助歡迎點贊收藏,以爲寫的很差請跳至文末。git
一個超簡明使用的提交模版:github
git clone 倉庫地址 //進入下載好的本地倉庫文件夾下 git add . git commit -m "備註提交的部分" git push //提交本身的修改 git pull //若是不能push,須要先從遠程倉庫拉取到別人的修改
固然,你覺得 GitHub 就是這麼簡單的東西麼?曾經的我就是這麼覺得的,至少上面這幾個指令讓我成功的提交了幾回,直到我遇到了衝突……對於使用來講,我以爲最惱火的就是在提交的時候遇到衝突,這時候就須要咱們瞭解各類 Git 指令,對應狀況對症下指令了,下面是一些可能會經常使用到的指令,以列表的形式給出。安全
pwd
命令用於顯示當前目錄。服務器
經過 git init
命令把這個目錄變成 Git 能夠管理的倉庫,文件下就會有一個名爲 .git 的隱藏文件夾。若是你沒有看到 .git 目錄,那是由於這個目錄默認是隱藏的,用 ls -ah
命令就能夠看見。app
使用標準的 UTF-8 編碼。ssh
用命令 git add
告訴 Git,把文件添加到倉庫。學習
git commit
命令,-m
後面輸入的是本次提交的說明,能夠輸入任意內容,固然最好是有意義的,這樣你就能從歷史記錄裏方便地找到改動記錄。編碼
commit
能夠一次提交不少文件,因此你能夠屢次 add
不一樣的文件。spa
git status
命令可讓咱們時刻掌握倉庫當前的狀態。日誌
git diff
命令看具體修改了什麼內容。
把修改提交到 git 版本庫:
提交修改和提交新文件是同樣的兩步,第一步是 git add
(實際上就是把文件修改添加到暫存區)。
在執行第二步 git commit
(實際上就是把暫存區的全部內容提交到當前分支)以前,咱們再運行 git status
看看當前倉庫的狀態。
提交後,咱們再用 git status
命令看看倉庫的當前狀態。
即:git add
——>git status
——>git commit
——>git status
。
git log
命令顯示從最近到最遠的提交日誌,加上 --pretty=oneline
參數顯示爲一行:
git log --pretty=oneline
在 Git 中,用 HEAD
表示當前版本,上一個版本就是 HEAD^
,上上一個版本就是HEAD^^
,固然往上 100 個版本寫 100 個 ^ 比較容易數不過來,因此寫成 HEAD~100
。
退回上一個版本 git reset --hard HEAD^
。
而後用 git log
再看看如今版本庫的狀態,用 git log
能夠查看提交歷史,以便肯定要回退到哪一個版本。
找到操做文件那步的的 commit id
(前面的十六進制數),用 git reset --hard commit_id
指定回到將來的某個版本(未關閉終端窗口的恢復操做)。
Git 提供了一個命令 git reflog
用來記錄你的每一次命令。
用 git reflog
查看命令歷史,以便肯定要回到將來的哪一個版本(關閉終端後再想恢復的操做)。
git cat-file
命令顯示版本庫對象的內容、類型及大小信息,cat 文件名:顯示文件內容。
第一次修改 -> git add
-> 第二次修改 -> git add
-> git commit
,每次修改,若是不 add 到暫存區,那就不會加入到 commit 中。
git checkout -- file
能夠丟棄工做區的修改
文件自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態。
文件已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態————讓這個文件回到最近一次 git commit
或 git add
時的狀態。
用命令 git reset HEAD file
能夠把暫存區的修改撤銷掉(unstage),從新放回工做區。
當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令 git checkout -- file
。
當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file
,就回到了上一點,第二步按上一步(git checkout -- file
)操做。
從暫存區提交到了版本庫,尚未把本身的本地版本庫推送到遠程,用退回上一個版本的操做(git reset --hard HEAD^
)。
rm
文件名:刪除該文件。
用 git status
查看哪些文件被刪除。
刪錯了,用 git checkout
文件名:用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」。
git rm
文件名:從版本庫刪除該文件,並 git commit
,以後不能再還原了。
命令 git rm
用於刪除一個文件,若是一個文件已經被提交到版本庫,誤刪可恢復,但只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。
添加遠程庫:在 github 上創建好後,在終端用命令:
git remote add origin git@你的倉庫
在本地關聯的就是你的遠程庫,添加後,遠程庫的名字就是 origin
,這是 Git 默認的叫法,也能夠改爲別的,可是 origin
這個名字一看就知道是遠程庫。
git push -u origin master
把本地庫的全部內容推送到遠程庫上,用git push
命令,其實是把當前分支 master
推送到遠程。因爲遠程庫是空的,咱們第一次推送 master
分支時,加上了 -u
參數,Git 不但會把本地的 master
分支內容推送的遠程新的 master
分支,還會把本地的 master
分支和遠程的 master
分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。
從如今起,只要本地做了提交,就能夠經過命令:
git push origin master
用命令 git clone
克隆一個本地庫:
git clone git@你要克隆的倉庫
Git 支持多種協議,包括 https,但經過 ssh 支持的原生 git 協議速度最快
建立 dev
分支,而後切換到 dev
分支,git checkout -b dev
(git checkout
命令加上 -b
參數表示建立並切換,至關於如下兩條命令:
$ git branch dev $ git checkout dev
用 git branch
命令查看當前分支,git branch
命令會列出全部分支,當前分支前面會標一個 *
號。
Dev
分支的工做完成,咱們就能夠切換回 master
分支:git checkout master
把 dev
分支的工做成果合併到 master
分支上:git merge dev
,git merge
命令用於合併指定分支到當前分支。
git branch -d dev
刪除 dev
分支。
在 Git 中,因爲分支是如此的強大,因此,每一個 bug
均可以經過一個新的臨時分支來修復,修復後,合併分支,而後將臨時分支刪除。
Git 提供了一個 stash
功能,能夠把當前工做現場「儲藏」起來,等之後恢復現場後繼續工做(如當前正在 dev 上進行的工做尚未提交)。
用 git status
查看工做區,就是乾淨的(除非有沒有被 Git 管理的文件)。
所以能夠放心地建立分支來修復 bug
。
首先肯定要在哪一個分支上修復 bug
,假定須要在 master
分支上修復,就從 master
建立臨時分支:
git checkout master/git checkout -b 分支名
如今修復 bug
而後提交。
修復完成後,切換到 master
分支,並完成合並,最後刪除臨時分支。
接着回到 dev
分支幹活。
用 git stash list
命令看工做現場。
工做現場還在,Git 把 stash
內容存在某個地方了,可是須要恢復一下,有兩個辦法:
用 git stash apply
恢復,可是恢復後,stash
內容並不刪除,須要用 git stash drop
來刪除。
用 git stash pop
,恢復的同時把 stash
內容也刪了。
再用 git stash list
查看就看不到任何 stash
內容,能夠屢次 stash
,恢復的時候,先用 git stash list
查看,而後恢復指定的 stash
,用命令:git stash apply stash@{0}
。
修復 bug
時經過建立新的 bug
分支進行修復而後合併最後刪除,當手頭工做沒有完成時,先把工做現場 git stash
一下,而後去修復 bug
修復後再 git stash pop
,回到工做現場。
每添加一個新功能,最好新建一個 feature
分支,在上面開發,完成後合併,最後刪除該 feature
分支。
開發一個新 feature
,最好新建一個分支,若是要丟棄一個沒有被合併過的分支,能夠經過 git branch -D <name>
強行刪除。
當你從遠程倉庫克隆時,實際上 Git 自動把本地的 master
分支和遠程的 master
分支對應起來了,而且遠程倉庫的默認名稱是 origin
。
要查看遠程庫的信息,用 git remote
。
用 git remote -v
顯示更詳細的信息。
推送分支,就是把該分支上的全部本地提交推送到遠程庫 git push
。
master
分支是主分支,所以要時刻與遠程同步。
Dev
分支是開發分支,團隊全部成員都須要在上面工做,因此也須要與遠程同步。
Bug
分支只用於在本地修復 bug
,不必推到遠程。
Feature
分支是否推到遠程,取決於你是否和你的小夥伴合做在上面開發。
本地新建的分支若是不推送到遠程,對其餘人就是不可見的。
從本地推送分支,使用 git push origin branch-name
,若是推送失敗,先用 git pull
抓取遠程的新提交。
在本地建立和遠程分支對應的分支,使用:
git checkout -b branch-name origin/branch-name
本地和遠程分支的名稱最好一致。
創建本地分支和遠程分支的關聯,使用:
git branch --set-upstream branch-name origin/branch-name
敲命令 git tag <name>
能夠打一個新標籤。
用命令 git tag
查看全部標籤。
默認標籤打在最新提交的 commit
上,不然找到歷史提交的 commit id
,而後用命令 git tag <name> <commit id>
打上標籤。
找歷史提交的 commit id
,用命令 git log --pretty=oneline —abbrev-commit
。
標籤不是按時間順序列出,而是按字母排序的,用 git show <tagname>
查看標籤信息。
建立帶有說明的標籤,用 -a
指定標籤名,-m
指定說明文字,用命令 git show <tagname>
能夠看到說明文字。
經過 -s
用私鑰簽名一個標籤,簽名採用 PGP 簽名。
建立的標籤都只存儲在本地,不會自動推送到遠程,打錯的標籤能夠在本地安全刪除 git tag -d <name>
。
推送某個標籤到遠程,使用命令 git push origin <tagname>
。
一次性推送所有還沒有推送到遠程的本地標籤 git push origin —tags
。
若是標籤已經推送到遠程,要刪除遠程標籤先從本地刪除再從遠程刪除,刪除命令也是 push
。
命令 git push origin :refs/tags/<tagname>
能夠刪除一個遠程標籤
在 GitHub 上,能夠任意 Fork 開源倉庫。
本身擁有 Fork 後的倉庫的讀寫權限。
能夠推送 pull request
給官方倉庫來貢獻代碼。
添加一個新的遠程倉庫,在本地庫上使用命令 git remote add <遠程庫名字> <SSH地址>
,再用 git remote -v
查看遠程庫信息。
git 給遠程庫起的默認名稱是 origin
,若是有多個遠程庫,咱們須要用不一樣的名稱來標識不一樣的遠程庫:
git push <遠程庫名> master
敲一行命令告訴 Git 用 st
就表示 status:git config --global alias.st status
,--global
參數是全局參數,也就是這些命令在這臺電腦的全部 Git 倉庫下都有用,加上 --global
是針對當前用戶起做用的,若是不加則只針對當前的倉庫起做用。
配置一個 git last
,讓其顯示最後一次提交信息 git config --global alias.last 'log -1'
,用 git last
就能顯示最近一次的提交。
每一個倉庫的 Git 配置文件都放在 .git/config 文件中:cat .git/config
當前用戶的 Git 配置文件放在用戶主目錄下的一個隱藏文件 .gitconfig
中:cat .gitconfig。
配置別名也能夠直接修改這個文件,若是改錯了,能夠刪掉文件從新經過命令配置。
搭建 Git 服務器做爲私有倉庫使用。
Git push —-force
能夠在沒有pull
的狀況下直接「暴力」push
。
查看分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
在兩個分支上同時修改一個文件會發生衝突,當 Git 沒法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成,用 git log —graph
命令能夠看到分支合併圖。
git merge --no-ff -m"again and again" dev
,用git log
看看分支歷史,合併後的歷史有分支,能看出來曾經作過合併,而 fast forward 合併就看不出來曾經作過合併。
在實際開發中,按照幾個基本原則進行分支管理:
Master
分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活。剩下的關於 Git 的學習,最有效的方法可能就是實踐了,如今就開始創建你的 Github 帳號吧。
不足之處,歡迎指正。