git 教程2 (git常用命令解说)
<1>$ git -- help (調出git的幫助文檔)
<2>$ git +命令 --help (查看某個具體命令的幫助文檔)
<3>$ git --version (查看git版本號)
<4>$ git init (生成空的本地倉庫)
<5>$ git add <file>(將文件添加到暫存區)
<6>$ git commit (將暫存區里的文件提交到本地倉庫)
<7>$ git commi -m <message>(-m后面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。)
<8>初次commit 之前,需要配置用戶郵箱及用戶名,使用以下命令:
$ git config --global user.email ''you@example.com''
$ git config --global user.name ''Your Name''
<9>文件狀態
新建文件狀態為untracked
使用git add 命令將新建文件加入到暫存區,文件狀態變為staged
使用git commit 命令將暫存區的文件提交到本地倉庫,狀態變為Unmodified
如果對Unmodified狀態的文件進行修改,狀態變為modified
如果對Unmodified狀態的文件進行git rm 操作,其狀態回到untracked狀態
<10>$ git log (顯示從最近到最遠的提交日志)
(1)git log命令顯示的信息的具體含義:
commit 4a70ceb24b6849ad830d6af5126c9227b333d2d1 --通過算法SHA-1計算出的校驗和也叫commit id
Author: wiggin <wiggin@gmail.com> --作者跟郵箱概要信息
Date: Wed May 16 23:51:02 2018 +0800 --提交時間
還有--commit 的時候,使用-m選項所寫的一段概要說明
(2)$ git log -n (表示查看最近的n次提交)
(3)$ git log -p (顯示提交的不同點)
(4)$ git log --author 查看具體某個作者的提交
(5)$ git log --pretty=oneline (簡化的日志)
(6)$git log --graph (以一個簡單的線圖串聯整個提交歷史)
<11>$ git diff (用于比較差異)
diff -->difference的縮寫,用于比較差異
使用場景:
1、解決沖突
2、制作補丁
(1)$ git diff 不加任何參數 (用于比較當前工作區跟暫存區的差異)
(2)$ git diff --cached 或者--staged (比較暫存區與最新本地版本庫)
(3)$ git diff HEAD (比較工作區與最新本地版本庫)
(4)$ git diff 分支名 (查看當前分支跟指定分支的差異)
(5)$ git diff 分支名1 分支名2 (查看兩個指定分支(已提交的文件)的差異,分支2 跟分支1的差別)
(6)$ git diff 文件名 (查看指定文件的差異)
(7)$ git diff commitid1 commitid2 (用于列出兩個歷史提交的差異)
(8)$ git diff --stat (用于羅列有變更的文件)
(9)$ git diff輸出信息的具體含義如下:
diff --git a/file2 b/file2 file2的兩個版本
index c200906..29e2b3c 100644
--- a/file2 表示變更前的文件
+++ b/file2 表示當前文件
@@ -1 +1,2 @@ 變更前的文件的第一行與變更之后的文件的第一行往下兩行,這塊文件區域有差異
222
+111 +表示新增了一行 -表示刪除了一行 如果對一行內容進行修改,在此處體現出來的就是先刪除一行,再新增一行
<12>$ git reset
使用場景:版本回滾
(1)$ git reset HEAD 文件名 移除不必要的添加到暫存區的文件
(2)$ git reset HEAD^ 或者 commitid 去掉上一次的提交
(3)$ git reset --soft HEAD^ 修改上次提交的描述信息,即修改commit -m "修改這里的內容"
(4)$git reset --soft 只是將HEAD引用指向指定的提交,工作區跟暫存區的內容不會改變
(5)$git reset --mixed (默認選項)將HEAD指向指定的提交,暫存區的內容隨之改變,工作區內容不變
(6)$git reset --hard 將HEAD指向指定的提交,暫存區跟工作區都會改變
(7)$ git reset --hard HEAD^ (回滾到上個版本)
(8)$ git reset -- hard +commit id 前幾位 (回滾到指定版本號)
(9)$git reset (–mixed) HEAD~1 回退一個版本,且會將暫存區的內容和本地已提交的內容全部恢復到未暫存的狀態,不影響原來本地文件(未提交的也不受影響)
(10)$git reset –soft HEAD~1 回退一個版本,不清空暫存區,將已提交的內容恢復到暫存區,不影響原來本地的文件(未提交的也不受影響)
(11)git reset –hard HEAD~1 回退一個版本,清空暫存區,將已提交的內容的版本恢復到本地,本地的文件也將被恢復的版本替換
簡單總結一下,其實就是--soft 、--mixed以及--hard是三個恢復等級。使用--soft就僅僅將頭指針恢復,已經add的緩存以及工作空間的所有東西都不變。
如果使用--mixed,就將頭恢復掉,已經add的緩存也會丟失掉,工作空間的代碼什么的是不變的。如果使用--hard,那么一切就全都恢復了,頭變,aad的緩存消失,代碼什么的也恢復到以前狀態。
<13>$ git reflog (查看歷史命令)
<14>$ git status (查看緩沖區狀態)
<15>$git rm (用于git文件的刪除操作)
$ git rm --cache filename 僅刪除暫存區里的文件,在工作區該文件仍然存在
$ git rm filename 命令如果不加 --cache 會刪除工作區里的文件,并提交到暫存區,此時暫存區也無該文件
<16>$ git checkout -- file (丟掉工作區的修改)
注意(1)$ git checkout filename 即git checkout 直接加文件名是從暫存區將文件恢復到工作區,如果工作區已經存在該文件,則會選擇覆蓋該文件
(2)$ git checkout <branch name> <filename> 即$ git checkout 加分支名 + 文件名則表示從分支<branch name>拉取文件,并覆蓋工作區文件
(3)文件已修改,未add到暫存區:$ git checkout -- file可還原工作區文件
(4)文件已修改,并add到暫存區未commit:$ git read HEAD file $ git checkout -- file兩條命令可還原工作區文件
<17>$ ssh -keygen -t rsa -C "799583930@qq.com" (創建SHH KEY)
<18>$ git remote add origin git@server-name:path/repo-name.git (關聯遠程倉庫repo-name)
<19>$ git push -u origin master (第一次推送分支master內容)
<20>此后,每次本地提交后,只要有必要,就可以使用命令$ git push origin master推送最新修改;
<21>$ git clone git@github.com:enjoyzier/gitskills.git (克隆github倉庫,注意:要克隆一個倉庫,首先必須知道倉庫的地址,然后使用git clone命令克隆。
Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快。)
<22>$ git branch (查看所有分支)
<23>$git branch <name> (創建分支)
<24>$ git checkout <name> (切換分支,如果在分支上面對文件進行修改之后,沒有commit就切換到另一個分支,這個時候會報錯,因為沒有commit的文件在切換分支之后會被覆蓋,所以git會報錯提示)
<25>$ git checkout -f <name> (強制切換分支,如果當前有未提交的變更,會直接丟棄
-f 參數一定一定要非常非常小心使用,一般情況下不建議使用,除非真的要強制去執行)
<26>$ git checkout -b <name> (git checkout命令加上-b參數表示創建并切換分支,相當于以下兩條命令:
$ git branch <name>
$ git checkout <name>)
<27>$ git merge <name> (合并指定分支到當前分支)
<28>$ git branch -d <name> (刪除分支,不能刪除當前所在的分支)
<29>$ git branch -m <oldname> <newname> (更改分支名)
<30> 當Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。解決沖突就是把Git合并失敗的文件手動編輯為我們希望的內容,再提交。
<31>$ git log --graph --pretty=oneline --abbrev-commit (看到分支合并圖。)
<32>在實際開發中,我們應該按照幾個基本原則進行分支管理:首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;
<33>$ git merge --no-ff -m "merge with no-ff" <name> (合并分支時,加上--no-ff參數就可以用普通模式合并,合并后的歷史有分支,能看出來曾經做過合并,而fast forward合并就看不出來曾經做過合并。)
<34>$ git tag (標簽相關命令)
(1)$ git tag 不加任何參數,表示顯示標簽列表(按字母順序,非時間順序)
(2)$ git tag <tagname> (默認給最近的一個提交打上標簽)
(3)$ git tag <tagname> <commit_id> (給commit_id指定的提交打上標簽)
(4)$ git show <tagname> (顯示該標簽相關的那次提交的相關信息)
(5)$ git tag -d <tagname> (刪除該標簽)
(6)$ git push <遠程分支名> <標簽名> (把某個標簽(必須是本地已經存在的標簽,否則推送失敗)推送到遠程服務器上)
(7)刪除遠程標簽的步驟
先刪除本地的標簽git tag -d 標簽名,再刪除遠程的標簽 git push origin :refs/tags/標簽名
注意:標簽與commit掛鉤,只要commit存在于多個分支,那么這幾個分支都能看見這個標簽
<35>修復bug時,我們會通過創建新的bug分支進行修復,然后合并,最后刪除;當手頭工作沒有完成時,先把工作現場git stash一下,然后去修復bug,修復后,再git stash pop,回到工作現場。
<36>$ git stash (保存工作現場)
<37>$ git stash list (查看工作現場列表)
<38>$ git stash pop (恢復工作現場,恢復的同時刪除stash內容)
<39>$ git stash apply <stash id> (你可以多次stash,恢復的時候,先用git stash list查看stash列表,然后用命令git stash apply <stash id>恢復指定的stash)
<40>開發一個新feature,最好新建一個分支;如果要丟棄一個沒有被合并過的分支,可以通過$ git branch -D <name>強行刪除。
<41>多人協作的工作模式:
首先,可以試圖用$ git push origin <branch-name>推送自己的修改;
如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并;
如果合并有沖突,則解決沖突,并在本地提交;
沒有沖突或者解決掉沖突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
這就是多人協作的工作模式,一旦熟悉了,就非常簡單。
<42>$ git remote -v (查看遠程倉庫信息)
<43>本地新建的分支如果不推送到遠程,對其他人就是不可見的
<44>從本地推送分支,使用$ git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交
<45>$ git fetch拉取遠程倉庫的變更到本地倉庫
<46>git pull 不建議使用 等同于fetch之后merge
<47>在本地創建和遠程分支對應的分支,使用$ git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;
<48>建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name
<49>從遠程抓取分支,使用git pull,如果有沖突,要先處理沖突。
<50>使用.gitignore文件
(1)為什么要使用.gitignore 文件?
大量與項目無關的文件全推到遠程倉庫上,同步的時候會非常慢,且跟編輯器相關的一些配置推上去之后,別人更新也會受其影響。所以,我們使用該文件,對不必要的文件進行忽略,使其不被git追蹤
一般情況下,.gitignore文件,在項目一開始創建的時候就創建,并推送到遠程服務器上。這樣大家初次同步項目的時候,就是用到該文件,避免以后,團隊成員把與項目無關的文件,傳到遠程服務器上
*.log 表示忽略項目中所有以.log結尾的文件
123?.log 表示忽略項目中所有以123加任意字符的文件
/error.log 表示忽略項目中根目錄中的error.log 這個文件
src/main/test/* 表示忽略/src/main/test/目錄下的所有文件
*.class
**/java/ 匹配所有java目錄下的所有文件
!/error.log 表示在之前的匹配規則下,被命中的文件,可以使用!對前面的規則進行否定
(2)對于已經提交到遠程或本地倉庫的文件,.gitignore配置之后不會生效。我們必須先刪除本地暫存區里的文件,之后再加上.gitignore 文件,最后再把變更提交到遠程倉庫上。
git rm --cached 文件名 從暫存區刪除某個文件
git rm -rf --cached 文件夾 表示遞歸刪除暫存區該文件夾的所有東西
?
轉載于:https://www.cnblogs.com/wuxunyan/p/9592397.html
總結
以上是生活随笔為你收集整理的git 教程2 (git常用命令解说)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis服务器防止入侵,加ip,密码限
- 下一篇: 中国人工智能产业发展联盟成立 360任副