【Git】常用命令
【Git】常用命令
轉載:https://www.cnblogs.com/yangchongxing/p/10173994.html
目錄
=======================================================
1、配置
2、查看配置
3、獲取幫助
4、獲取倉庫
5、檢查狀態
6、狀態簡覽
7、跟蹤新文件
8、暫存已修改文件
9、忽略文件
10、查看未暫存的修改內容
11、查看已暫存的修改內容
12、Git Diff 的圖像化插件版本
13、提交更新
14、提交更新(跳過使用暫存區域)
15、刪除文件
16、移動文件
17、查看提交歷史Log
18、撤消操作
19、查看遠程倉庫
20、添加遠程倉庫
21、拉取遠程倉庫
22、推送到遠程倉庫
23、查看遠程倉庫
24、重命名遠程倉庫
25、移除遠程倉庫
26、打標簽
27、Git 別名
=======================================================
生成公鑰
$ ssh-keygen -t rsa -C "EmailAddress@126.com"/用戶/.ssh/id_rsa.pub 中生成了公鑰
1、配置
$ git config --global user.name "楊崇興" $ git config --global user.email yangchongxing@admin.com2、查看配置
2.1、全部key
$ git config --list2.2、單個key
$ git config user.name3、獲取幫助
$ git help <verb> $ git <verb> --help $ man git-<verb>例子
$ git help config4、獲取倉庫
4.1、在現有目錄中初始化倉庫
$ git init如果你是在一個已經存在文件的文件夾(而不是空文件夾)中初始化 Git 倉庫來進行版本控制的話,你應該開始跟蹤這些文件并提交。 你可通過 git add 命令來實現對指定文件的跟蹤,然后執行 git commit 提交:
$ git add *.java $ git add LICENSE $ git commit -m 'initial project version'4.2、克隆現有的倉庫
克隆倉庫的命令格式是 git clone [url]
$ git clone https://github.com/libgit2/libgit2這會在當前目錄下創建一個名為 “libgit2” 的目錄,并在這個目錄下初始化一個 .git 文件夾,從遠程倉庫拉取下所有數據放入 .git 文件夾,然后從中讀取最新版本的文件的拷貝。
如果你想在克隆遠程倉庫的時候,自定義本地倉庫的名字,你可以使用如下命令:
$ git clone https://github.com/libgit2/libgit2 mylibgit這將執行與上一個命令相同的操作,不過在本地創建的倉庫名字變為 mylibgit。
Git 支持多種數據傳輸協議。 上面的例子使用的是 https:// 協議,不過你也可以使用 git:// 協議或者使用 SSH 傳輸協議,比如 user@server:path/to/repo.git 。
5、檢查狀態
$ git status6、狀態簡覽
$ git status -s7、跟蹤新文件
$ git add README查看狀態顯示:Changes to be committed:(要提交的修改)
8、暫存已修改文件
已追蹤文件修改后查看狀態:Changes not staged for commit:(要暫存的修改)
這行下面的命令暫存
9、忽略文件
創建一個名為 .gitignore 的文件,列出要忽略的文件模式。
文件 .gitignore 的格式規范如下:
所有空行或者以 # 開頭的行都會被 Git 忽略。
可以使用標準的 glob 模式匹配。
匹配模式可以以(/)開頭防止遞歸。
匹配模式可以以(/)結尾指定目錄。
要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(!)取反。
所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式。 星號(*)匹配零個或多個任意字符;[abc] 匹配任何一個列在方括號中的字符(這個例子要么匹配一個 a,要么匹配一個 b,要么匹配一個 c);問號(?)只匹配一個任意字符;如果在方括號中使用短劃線分隔兩個字符,表示所有在這兩個字符范圍內的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的數字)。 使用兩個星號(*) 表示匹配任意中間目錄,比如`a/**/z` 可以匹配 a/z, a/b/z 或 `a/b/c/z`等。
下面是一個 .gitignore 文件示例
# 忽略.txt結尾的文件 *.txt# 忽略build目錄 build/# 僅僅忽略當前目錄的TODO文件,不是子目錄subdir/TODO文件,不遞歸 /TODO# 忽略當前目錄doc/notes.txt文件, 而不是doc/server/arch.txt文件,不遞歸 doc/*.txt# 忽略doc/目錄下所有.pdf文件 doc/**/*.pdf?10、查看未暫存的修改內容
$ git diff此命令比較的是工作目錄中當前文件和暫存區域快照之間的差異, 也就是修改之后還沒有暫存起來的變化內容。
請注意,git diff 本身只顯示尚未暫存的改動,而不是自上次提交以來所做的所有改動。 所以有時候你一下子暫存了所有更新過的文件后,運行 git diff 后卻什么也沒有,就是這個原因。
例子
diff --git a/README b/README index 50bba42..79f5c7f 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@readmeL1 -L2L3 +hello11、查看已暫存的修改內容
若要查看已暫存的將要添加到下次提交里的內容,可以用 git diff --cached 命令。(Git 1.6.1 及更高版本還允許使用 git diff --staged,效果是相同的,但更好記些。)
$ git diff --cached $ git diff --staged例子
diff --git a/LICENSE b/LICENSE deleted file mode 100644 index ea5ef99..0000000 --- a/LICENSE +++ /dev/null @@ -1,3 +0,0 @@ -LICENSE lll -123 -45610和11文件的狀態
On branch master Changes to be committed:(use "git reset HEAD <file>..." to unstage)deleted: LICENSEChanges 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: README12、Git Diff 的圖像化插件版本
在本書中,我們使用 git diff 來分析文件差異。 但是,如果你喜歡通過圖形化的方式或其它格式輸出方式的話,可以使用 git difftool 命令來用 Araxis ,emerge 或 vimdiff 等軟件輸出 diff 分析結果。 使用 git difftool --tool-help 命令來看你的系統支持哪些 Git Diff 插件。
$ git difftool?13、提交更新
確認還有什么修改過的或新建的文件還沒有 git add 過,否則提交的時候不會記錄這些還沒暫存起來的變化。 這些修改過的文件只保留在本地磁盤。 所以,每次準備提交前,先用 git status 看下,是不是都已暫存起來了, 然后再運行提交命令。
$ git commit這種方式會啟動文本編輯器以便輸入本次提交的說明。
另外,你也可以在 commit 命令后添加 -m 選項,將提交信息與命令放在同一行。--amend選項會提交到最后一次提交中,也可修改最后一次提交的注釋
$ git commit -m "add file"$ git commit --amend -m 'add file'
[master 6c8ddd8] test commit1 file changed, 3 deletions(-)delete mode 100644 LICENSE
?14、提交更新(跳過使用暫存區域)
只要在提交的時候,給 git commit 加上 -a 選項,Git 就會自動把所有已經跟蹤過的文件暫存起來一并提交,從而跳過 git add 步驟
$ git commit -a -m 'added'這樣就不用git add,注意:僅對已經跟蹤過的文件才可以
?15、刪除文件
要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除,然后提交。
可以用 git rm 命令完成此項工作,并連帶從工作目錄中刪除指定的文件,這樣以后就不會出現在未跟蹤文件清單中了。
注意:必須是已跟蹤且已提交且未修改的文件,沒有追蹤的文件直接使用 rm 命令刪除即可
$ git rm README如果刪除之前修改過并且已經放到暫存區域(git add)的話,則必須要用強制刪除選項 -f,也就是說修改過
注意:必須是已跟蹤且已修改的文件,有沒有暫存修改都可以刪除
$ git rm -f README另外一種情況是,我們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然希望保留在當前工作目錄中。 換句話說,你想讓文件保留在磁盤,但是并不想讓 Git 繼續跟蹤。 當你忘記添加 .gitignore 文件,不小心把一個很大的日志文件或一堆 .a 這樣的編譯生成文件添加到暫存區時,這一做法尤其有用。?
注意:刪除后文件將變為Untracked files(未跟蹤),若不想被 git 跟蹤可以加入 .gitignore 文件。
$ git rm --cached a.txt其他一些例子
git rm 命令后面可以列出文件或者目錄的名字,也可以使用 glob 模式。 比方說:
$ git rm log/\*.log注意到星號 * 之前的反斜杠 \, 因為 Git 有它自己的文件模式擴展匹配方式,所以我們不用 shell 來幫忙展開。 此命令刪除 log/ 目錄下擴展名為 .log 的所有文件。 類似的比如:
$ git rm \*~該命令為刪除以 ~ 結尾的所有文件。
?16、移動文件
$ git mv file_from file_to On branch master Changes to be committed:(use "git reset HEAD <file>..." to unstage)renamed: file_from -> file_to其實,運行 git mv 就相當于運行了下面三條命令:
$ mv README.md README $ git rm README.md $ git add README如此分開操作,Git 也會意識到這是一次改名,所以不管何種方式結果都一樣。 兩者唯一的區別是,mv 是一條命令而另一種方式需要三條命令,直接用 git mv 輕便得多。
17、查看提交歷史Log
無參按提交時間列出
$ git log出現多頁時,按回車顯示下一行,按空格顯示下一頁,按q退出。
SHA-1 校驗
作者的名字和電子郵件地址
提交時間以
提交說明
參數 -p:顯示每次提交的內容差異
參數 -n:顯示最近n(數字)提交
$ git log -p -2 commit 46fa22b5346bfc121a543be5230e8c2738104267 (HEAD -> master) Author: win <win@126.com> Date: Thu Dec 27 11:37:09 2018 +0800追加service.javadiff --git a/readme b/readme index e70eb97..d2d6456 100644 --- a/readme +++ b/readme @@ -1,3 +1,4 @@learn gitthis is a readme file, record information of project.追加index.java +追加service.javacommit bae33eedc50815f68036db2a48f62a6d349fc7ad Author: win <win@126.com> Date: Thu Dec 27 11:36:14 2018 +0800追加index.javadiff --git a/readme b/readme index 28fdfe1..e70eb97 100644 --- a/readme +++ b/readme @@ -1,2 +1,3 @@learn gitthis is a readme file, record information of project. +追加index.java?參數 --stat:查看提交的簡略的統計信息
$ git log -2 --stat commit 46fa22b5346bfc121a543be5230e8c2738104267 (HEAD -> master) Author: win <win@126.com> Date: Thu Dec 27 11:37:09 2018 +0800追加service.javareadme | 1 +1 file changed, 1 insertion(+)commit bae33eedc50815f68036db2a48f62a6d349fc7ad Author: win <win@126.com> Date: Thu Dec 27 11:36:14 2018 +0800追加index.javareadme | 1 +1 file changed, 1 insertion(+)列出所有被修改過的文件、有多少文件被修改了以及被修改過的文件的哪些行被移除或是添加了
參數 --pretty:指定使用不同于默認格式的方式展示提交歷史
每個提交放在一行顯示
$ git log --pretty=oneline還有下面三個
$ git log --pretty=short $ git log --pretty=full $ git log --pretty=fuller定制要顯示的記錄格式
$ git log --pretty=format:"%h - %an, %ar : %s" 選項 說明 %H 提交對象(commit)的完整哈希字串 %h 提交對象的簡短哈希字串 %T 樹對象(tree)的完整哈希字串 %t 樹對象的簡短哈希字串 %P 父對象(parent)的完整哈希字串 %p 父對象的簡短哈希字串 %an 作者(author)的名字 %ae 作者的電子郵件地址 %ad 作者修訂日期(可以用 --date= 選項定制格式) %ar 作者修訂日期,按多久以前的方式顯示 %cn 提交者(committer)的名字 %ce 提交者的電子郵件地址 %cd 提交日期 %cr 提交日期,按多久以前的方式顯示 %s 提交說明你一定奇怪 作者 和 提交者 之間究竟有何差別, 其實作者指的是實際作出修改的人,提交者指的是最后將此工作成果提交到倉庫的人。
當 oneline 或 format 與另一個 log 選項 --graph 結合使用時尤其有用
$ git log --pretty=format:"%h %s" --graphgit log 的常用選項 列出了我們目前涉及到的和沒涉及到的選項
選項 說明 -p 按補丁格式顯示每個更新之間的差異。 --stat 顯示每次更新的文件修改統計信息。 --shortstat 只顯示 --stat 中最后的行數修改添加移除統計。 --name-only 僅在提交信息后顯示已修改的文件清單。 --name-status 顯示新增、修改、刪除的文件清單。 --abbrev-commit 僅顯示 SHA-1 的前幾個字符,而非所有的 40 個字符。 --relative-date 使用較短的相對時間顯示(比如,“2 weeks ago”)。 --graph 顯示 ASCII 圖形表示的分支合并歷史。 --pretty 使用其他格式顯示歷史提交信息。可用的選項包括 oneline,short,full,fuller 和 format(后跟指定格式)。限制輸出長度
$ git log --since=2018-12-26 $ git log --since=2.weeks另一個非常有用的篩選選項是 -S,可以列出那些添加或移除了某些字符串的提交。 比如說,你想找出添加或移除了某一個特定函數的引用的提交,你可以這樣使用:
$ git log -Sfunction_name 選項 說明 -(n) 僅顯示最近的 n 條提交 --since, --after 僅顯示指定時間之后的提交。 --until, --before 僅顯示指定時間之前的提交。 --author 僅顯示指定作者相關的提交。 --committer 僅顯示指定提交者相關的提交。 --grep 僅顯示含指定關鍵字的提交 -S 僅顯示添加或移除了某個關鍵字的提交18、撤消操作
(1).修改提交信息,補漏提交文件
有時候我們提交完了才發現漏掉了幾個文件沒有添加,或者提交信息寫錯了。 此時,可以運行帶有 --amend 選項的提交命令嘗試重新提交:
$ git commit --amend -m '修改注釋'這個命令會將暫存區中的文件提交。 如果自上次提交以來你還未做任何修改,那么快照會保持不變,而你所修改的只是提交信息。
文本編輯器啟動后,可以看到之前的提交信息。 編輯后保存會覆蓋原來的提交信息。
例如,你提交后發現忘記了暫存某些需要的修改,可以像下面這樣操作:
$ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend最終你只會有一個提交 - 第二次提交將代替第一次提交的結果。
(2).文件已暫存的,取消暫存,保留修改內容,變為未暫存
$ git reset HEAD filename.txt執行完畢,文件變為修改未暫存的狀態
(3).文件未暫存的,撤消對文件的修改,丟棄修改內容
$ git checkout -- filename.txt你需要知道是一個危險的命令,這很重要。 你對那個文件做的任何修改都會消失 - 你只是拷貝了另一個文件來覆蓋它。 除非你確實清楚不想要那個文件了,否則不要使用這個命令。
?19、查看遠程倉庫
$ git remote -v必須在git目錄下使用,若沒有可以克隆一份
$ git clone https://github.com/schacon/ticgit20、添加遠程倉庫
$ git remote add <shortname> <url>shortname 簡寫,url 倉庫地址
$ git remote add pb https://github.com/paulboone/ticgit $ git remote -v現在你可以在命令行中使用字符串 pb 來代替整個 URL。例如,如果你想拉取 Paul 的倉庫中有但你沒有的信息,可以運行 git fetch pb:
$ git fetch pb remote: Counting objects: 43, done. remote: Compressing objects: 100% (36/36), done. remote: Total 43 (delta 10), reused 31 (delta 5) Unpacking objects: 100% (43/43), done. From https://github.com/paulboone/ticgit* [new branch] master -> pb/master* [new branch] ticgit -> pb/ticgit現在 Paul 的 master 分支可以在本地通過 pb/master 訪問到 - 你可以將它合并到自己的某個分支中,或者如果你想要查看它的話,可以檢出一個指向該點的本地分支。?
?21、拉取遠程倉庫
$ git fetch [remote-name]這個命令會訪問遠程倉庫,從中拉取所有你還沒有的數據。 執行完成后,你將會擁有那個遠程倉庫中所有分支的引用,可以隨時合并或查看。
如果你使用 clone 命令克隆了一個倉庫,命令會自動將其添加為遠程倉庫并默認以 “origin” 為簡寫。 所以,git fetch origin 會抓取克隆(或上一次抓取)后新推送的所有工作。 必須注意 git fetch 命令會將數據拉取到你的本地倉庫 - 它并不會自動合并或修改你當前的工作。 當準備好時你必須手動將其合并入你的工作。
如果你有一個分支設置為跟蹤一個遠程分支,可以使用 git pull 命令來自動的抓取然后合并遠程分支到當前分支。 這對你來說可能是一個更簡單或更舒服的工作流程;默認情況下,git clone 命令會自動設置本地 master 分支跟蹤克隆的遠程倉庫的 master 分支(或不管是什么名字的默認分支)。 運行 git pull 通常會從最初克隆的服務器上抓取數據并自動嘗試合并到當前所在的分支。
22、推送到遠程倉庫
$ git push [remote-name] [branch-name]當你想要將 master 分支推送到 origin 服務器時,那么運行這個命令就可以將你所做的備份到服務器:
$ git push origin master只有當你有所克隆服務器的寫入權限,并且之前沒有人推送過時,這條命令才能生效。 當你和其他人在同一時間克隆,他們先推送到上游然后你再推送到上游,你的推送就會毫無疑問地被拒絕。 你必須先將他們的工作拉取下來并將其合并進你的工作后才能推送。
$ git push -u origin master參數:-u,指定一個默認主機,這樣后面就可以不加任何參數使用 git push 命令
23、查看遠程倉庫
$ git remote show [remote-name]查看遠程origin
$ git remote show origin24、重命名遠程倉庫
想要將 pb 重命名為 paul
$ git remote rename pb paul值得注意的是這同樣也會修改你的遠程分支名字。 那些過去引用 pb/master 的現在會引用 paul/master。
25、移除遠程倉庫
$ git remote rm paul26、打標簽
(1).列出標簽
$ git tag(2).創建附注標簽
在 Git 中創建一個附注標簽是很簡單的。 最簡單的方式是當你在運行 tag 命令時指定 -a 選項:
$ git tag -a v1.0 -m '版本1.0'-m 選項指定了一條將會存儲在標簽中的信息。 如果沒有為附注標簽指定一條信息,Git 會運行編輯器要求你輸入信息。
通過使用 git show 命令可以看到標簽信息與對應的提交信息:
$ git show v1.0輸出顯示了打標簽者的信息、打標簽的日期時間、附注信息,然后顯示具體的提交信息。
(3).創建輕量標簽
創建輕量標簽,不需要使用 -a、-s 或 -m 選項,只需要提供標簽名字
$ git tag v2.0 $ git show v2.0(4).后期打標簽
$ git tag -a v1.2 校驗和(5).共享標簽
默認情況下,git push 命令并不會傳送標簽到遠程倉庫服務器上。 在創建完標簽后你必須顯式地推送標簽到共享服務器上。 這個過程就像共享遠程分支一樣 - 你可以運行 git push origin [tagname]。
$ git push origin v1.5(6).檢出標簽
在 Git 中你并不能真的檢出一個標簽,因為它們并不能像分支一樣來回移動。 如果你想要工作目錄與倉庫中特定的標簽版本完全一樣,可以使用 git checkout -b [branchname] [tagname] 在特定的標簽上創建一個新分支:
$ git checkout -b version2 v2.0.0當然,如果在這之后又進行了一次提交,version2 分支會因為改動向前移動了,那么 version2 分支就會和 v2.0.0 標簽稍微有些不同,這時就應該當心了。
27、Git 別名
如果不想每次都輸入完整的 Git 命令,可以通過 git config 文件來輕松地為每一個命令設置一個別名
這里有一些例子
$ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status $ git config --global alias.unstage 'reset HEAD --' $ git unstage fileA $ git reset HEAD -- fileA $ git config --global alias.last 'log -1 HEAD' $ git last?
轉載于:https://www.cnblogs.com/yangchongxing/p/10173994.html
總結
- 上一篇: 【vue-number-scroll】数
- 下一篇: python 之 前端初识 html