作者:心葉
時間:2018-04-20 23:20
工作區:就是你在電腦裡能看到的目錄。
暫存區:英文叫stage, 或index。一般存放在 “.git目錄下” 下的index檔案(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
第一步:使用者名稱和郵箱。
分別修改使用者名稱和郵箱,其中–global帶和不帶的區別在於操作檔案是.git/config還是~/.gitconfig,如果你使用的是–system則對應的就是/etc/gitconfig檔案。
對於是否在最後帶username或email,區別在於你是設定還是檢視。
git config [--global] user.name [username]
git config [--global] user.email [email]
第二步:主機。
列出所有遠端主機,使用-v選項(即:git remote -v),可以參看遠端主機的網址,使用show hostname可以檢視主機hostname的詳細資訊。
git remote [show hostname]
新增連線的遠端倉庫,其中hostname是給倉庫起的名稱,uri是倉庫地址。
git remote add hostname uri
刪除連線的遠端倉庫,其中hostname是給倉庫起的名稱。
git remote rm hostname
修改遠端主機oldhostname名稱為newhostname。
git remote rename oldhostname newhostname
第三步:初始化。
使用該命令會在目錄中建立新的Git倉庫,本地化的。
git init
把uri指定的倉庫程式碼克隆到本地來,如果加了可選引數dir,表示克隆到該資料夾下。
git clone uri [dir]
第四步:提交。
從遠端伺服器拉取程式碼更新,hostname是對應的倉庫名稱,branchname是分支名稱。
git pull hostname branchname
【不推薦直接用這個】新增檔案到緩衝區,你可以指定新增的檔案filename,也可以使用-A把資料夾下全部檔案新增到緩衝區。
git fetch hostname branchname
git diff localbranchname hostname/branchname[ -- filepath][ >>filePath]
git merge hostname/branchname
【推薦使用這個比較安全】以上命令的含義:首先從遠端的hostname的branchname分支下載最新的版本到hostname/branchname分支上,然後比較本地的branchname分支和hostname/branchname分支的差別,最後進行合併。
最後可選引數 — filepath是指定對比的檔案,不指定就是全部檔案。
最後的可選引數 >>filePath表示把差異檔案輸出到檔案,方便檢視。
git add filename|-A
提交程式碼到本地倉庫,-m後面的remark表示對這次提交的描述。
git commit [-m remark]
提交程式碼到遠端伺服器,hostname是對應的倉庫名稱,branchname是分支名稱。
git push hostname branchname
第五步:日誌。
檢視日誌(-p顯示每次提交的內容差異),後面的那些可選引數是對日誌過濾以後再顯示,-num舉個例子:-2表示檢視最近2次的提交歷史記錄,後面的fileName和branchName方便表示檢視特定檔案和分支的日誌,commit代表檢視提交日誌。
git log [-p] [-num|fileName|branchName|commit]
顯示整個本地倉儲的commit,包括所有branch的commit,甚至包括已經撤銷的commit,只要HEAD發生了變化,就會在reflog裡面看得到,git log只包括當前分支的commit。
git reflog
第六步:回退。
將特定的filename檔案回滾到hashname提交。
git checkout hashname filename
用暫存區的所有檔案直接覆蓋本地檔案,不給使用者任何確認的機會,可以理解放棄本地修改。
git checkout .
如果發現最新的一次提交完了加某個檔案,它會把最新的提交打回暫存區,並嘗試重新提交。
git commit —amend
把add新增的檔案filename從緩衝區刪除。
git reset -- filename
恢復到hashname指定的提交時,不保留修改。
git reset --hard hashname
恢復到hashname指定的提交時,保留修改。
git reset --soft hashname
回滾提交,其中HEAD是最新的一次提交別名(git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。)。
git revert HEAD|hashname
第七步:比較。
檢視二次提交對比修改了什麼,可以看見他們之間的全部更改。
git diff commitFromHashname..commitToHashname
執行該命令可以知道倉庫目前的狀態,是否是最新程式碼,有沒有修改等。
git status
檢視當前全部檔案的修改
git diff HEAD
僅檢視變化(changes 【not staged】to be commited)
git diff
僅檢視變化(changes 【staged】to be commited)
git diff --staged
第八步:合併。
合併分支branchname到當前活躍分支。
git merge|rebase branchname
第九步:暫存。
暫存當前正在進行的工作,比如想pull最新程式碼,又不想加新commit,或者另外一種情況,為了fix一個緊急的bug,先stash,使返回到自己上一個commit,改完bug之後再stash pop,繼續原來的工作。
git stash
取出最後暫存的,並從暫存棧移除。
git stash pop
將當前的暫存棧資訊列印出來。
git stash list
將暫存棧清空。
git stash clear
將你指定版本號為stash@{num}的工作取出來,不會移除。
git stash apply stash@{num}
第十步:標籤。
檢視已經打的標籤,如果要進行篩選,可以使用-l新增選擇(比如git tag -l v1.會選擇開頭是v1.標籤,而git tag -l .2會選擇結尾是.2的,以此類推別的,*就是一個萬用字元)。
git tag [-l 篩選表示式]
打一個名稱為tagname並新增該標籤的註釋為tagremark的標籤,這種是普通的標籤(如果你有GPG私鑰,把-a換成-s就是前面的tag了)。
git tag -a tagname [-m tagremark]
提交標籤tagname到遠端hostname。
git push hostname tagname
提交全部標籤到遠端hostname。
git push hostname --tags
刪除標籤tagname(本地的)。
git tag -d tagname
刪除標籤tagname(遠端的)。
git push hostname -d tag tagname
第十一步:分支。
檢視分支狀態,如果使用-r(即:git branch -r)表示檢視遠端分支狀態,-a選項檢視所有分支。
git branch
建立一個名稱叫branchname的分支,此分支初始化擁有的是你建立此分支時活躍分支。
git branch branchname
切換當前活躍分支為branchname。
git checkout branchname
刪除本地指定分支branchname。
git branch -d branchname
刪除遠端指定分支branchname。
git push hostname --delete branchname
修改本地分支oldbranchname的名稱為newbranchname。
git branch -m oldbranchname newbranchname