GIt學習——git 基礎命令 (二)

目錄

撤銷修改

遠程倉庫的使用 git remote

查看遠程倉庫信息

添加遠程倉庫

從遠程倉庫中抓取與拉取

倉庫重命名lo

打標籤

列出標籤

創建附註標籤

後期打標籤

共享標籤

刪除標籤

檢出標籤


撤銷修改

case1:想要對未加入暫存區的文件進行修改,直接 git checkout -- <file> , 這樣就會去掉之前編輯的東西;

case2:想要撤銷已經加入暫存區的修改,要先執行 git reset head <file> , 然後再通過 git checkout -- <file>.

git checkout --  <file> 對已經加入暫存區的修改,無法撤銷,所以先執行git reset head <file>

其實,這兩個命令在我們進行 修改一個已經被追蹤的文件時,執行 git status 命令會告訴我們的, 

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   readme.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

所以,撤銷修改無非就是這兩個命令咯,比較好理解了。另外,我想修改提交信息的日誌即,commit 中 -m ‘提交日誌’ ,可以使用

$ git commit --amend -m ‘新的提交日誌’

 但是要注意,這時候之前的提交的文件沒有經過再次修改。

遠程倉庫的使用 git remote

管理遠程倉庫包括瞭解如何添加遠程倉庫、移除無效的遠程倉庫、管理不同的遠程分支並定義它們是否被跟蹤等等。管理遠程倉庫包括瞭解如何添加遠程倉庫、移除無效的遠程倉庫、管理不同的遠程分支並定義它們是否被跟蹤等等。然後所有和遠程倉庫相關的操作可以通過 git remote. 遠程倉庫默認名字 “origin” 與分支名字 “master” 一樣,在 Git 中並沒有任何特別的含義一樣。 同時 “master” 是當你運行 git init 時默認的起始分支名字,原因僅僅是它的廣泛使用,“origin” 是當你運行 git clone 時默認的遠程倉庫名字。 如果你運行 git clone -o booyah,那麼你默認的遠程分支名字將會是 booyah/master

查看遠程倉庫信息

如果想查看你已經配置的遠程倉庫url,可以運行 git remote 命令。 它會列出你指定的每一個遠程倉庫名字簡寫。 如果你已經克隆了自己的倉庫,那麼至少應該能看到 origin ——這是 Git 給你克隆的倉庫的默認名字:

$ git remote
origin

你也可以指定選項 -v,會顯示需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL。

$ git remote -v
origin	https://github.com/schacon/ticgit (fetch)
origin	https://github.com/schacon/ticgit (push)

那麼,倉庫簡寫名稱爲origin,對應的url爲 https://github.com/.... 如果想要查看更多的倉庫遠程信息 ,可以用 

$ git remote show  [shortname]
 
git remote show origin

 

$ git remote show origin
* remote origin
  Fetch URL: [email protected]:huburt-Hu/NewbieGuide.git
  Push  URL: [email protected]:huburt-Hu/NewbieGuide.git
  HEAD branch: master
  Remote branches:
    dev    tracked
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

 這個命令列出了當你在特定的分支上執行 git push 會自動地推送到哪一個遠程分支。 它也同樣地列出了哪些遠程分支不在你的本地,哪些遠程分支已經從服務器上移除了,還有當你執行 git pull 時哪些分支會自動合併。

 

添加遠程倉庫

我在之前的章節中已經提到並展示瞭如何添加遠程倉庫的示例,不過這裏將告訴你如何明確地做到這一點。 運行 git remote add <shortname> <url> 添加一個新的遠程 Git 倉庫,同時指定一個你可以輕鬆引用的簡寫:

sjh@DESKTOP-QFQQSSM MINGW64 /d/androidProject/temp
$ git init
Initialized empty Git repository in D:/androidProject/temp/.git/

sjh@DESKTOP-QFQQSSM MINGW64 /d/androidProject/temp (master)
$ git remote add remoteUrl [email protected]:huburt-Hu/NewbieGuide.git

sjh@DESKTOP-QFQQSSM MINGW64 /d/androidProject/temp (master)
$ git remote
remoteUrl

這裏,我們可以把一個本地存在的倉庫,通過git remote add 命令來和遠程庫進行關聯,這裏我用了 shortName 爲 remoteUrl ,然後再運行 git remote 就得到了remoteUrl ;

從遠程倉庫中抓取與拉取

$ git fetch [remote-name]

這個命令會訪問遠程倉庫,從中拉取所有你還沒有的數據。(這裏的remote-name 等於上面的shortname)

如果你使用 clone 命令克隆了一個倉庫,命令會自動將其添加爲遠程倉庫並默認以 “origin” 爲簡寫。 所以,git fetch origin 會抓取克隆(或上一次抓取)後新推送的所有工作。 必須注意 git fetch 命令會將數據拉取到你的本地倉庫——它並不會自動合併或修改你當前的工作。 當準備好時你必須手動將其合併入你的工作。

如果你有一個分支設置爲跟蹤一個遠程分支,可以使用 git pull 命令來自動的抓取然後合併遠程分支到當前分支。 這對你來說可能是一個更簡單或更舒服的工作流程;默認情況下,git clone 命令會自動設置本地 master 分支跟蹤克隆的遠程倉庫的 master 分支(或不管是什麼名字的默認分支)。 運行 git pull 通常會從最初克隆的服務器上抓取數據並自動嘗試合併到當前所在的分支。

從這裏看 fetch 和 pull 有一些差別,一般的,我們會用pull 進行抓取併合並,相當於是 pull = fetch + merge,同時fetch 好像並不常用。

倉庫重命名lo

如果想要重命名引用的名字可以運行 git remote rename 去修改一個遠程倉庫的簡寫名。 例如,想要將 pb 重命名爲 paul,可以用 git remote rename 這樣做:

$ git remote rename pb paul
$ git remote
origin
paul

值得注意的是這同樣也會修改你的遠程分支名字。 那些過去引用 pb/master 的現在會引用 paul/master

打標籤

像其他版本控制系統(VCS)一樣,Git 可以給歷史中的某一個提交打上標籤,以示重要。 比較有代表性的是人們會使用這個功能來標記發佈結點(v1.0 等等).

列出標籤

在 Git 中列出已有的標籤是非常簡單直觀的。 只需要輸入 git tag

$ git tag
v0.1
v1.3

還可以用通配符去匹配標籤,比如我想看1. xx 版本的tag;

$ git tag -l 'v1.*'
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0
v1.1.1
v1.2.0
v1.2.1
v1.2.2
v1.2.3

創建附註標籤

在 Git 中創建一個附註標籤是很簡單的。 最簡單的方式是當你在運行 tag 命令時指定 -a 選項:

$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4

-m 選項指定了一條將會存儲在標籤中的信息  。 類似 commit 的命令中 -m 作用。

通過使用 git show 命令可以看到標籤信息與對應的提交信息:

$ git show v1.4
tag v1.4
Tagger: Ben Straub <[email protected]>
Date:   Sat May 3 20:19:12 2014 -0700

my version 1.4

commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <[email protected]>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

輸出顯示了打標籤者的信息、打標籤的日期時間、附註信息,然後顯示具體的提交信息。

後期打標籤

你也可以對過去的提交打標籤。 假設提交歷史是這樣的:

$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

現在,假設在 v1.2 時你忘記給項目打標籤,也就是在 “updated rakefile” 提交。 你可以在之後補上標籤。 要在那個提交上打標籤,你需要在命令的末尾指定提交的校驗和(或部分校驗和):

$ git tag -a v1.2 9fceb02

可以看到你已經在那次提交上打上標籤了:

$ git tag
v0.1
v1.2
v1.3
v1.4
v1.4-lw
v1.5

 

共享標籤

默認情況下,git push 命令並不會傳送標籤到遠程倉庫服務器上。 在創建完標籤後你必須顯式地推送標籤到共享服務器上。 這個過程就像共享遠程分支一樣——你可以運行 git push origin [tagname]

$ git push origin v1.5
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To [email protected]:schacon/simplegit.git
 * [new tag]         v1.5 -> v1.5

如果想要一次性推送很多標籤,也可以使用帶有 --tags 選項的 git push 命令。 這將會把所有不在遠程倉庫服務器上的標籤全部傳送到那裏。

$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To [email protected]:schacon/simplegit.git
 * [new tag]         v1.4 -> v1.4
 * [new tag]         v1.4-lw -> v1.4-lw

現在,當其他人從倉庫中克隆或拉取,他們也能得到你的那些標籤。

刪除標籤

要刪除掉你本地倉庫上的標籤,可以使用命令 git tag -d <tagname>。例如,可以使用下面的命令刪除掉一個輕量級標籤:

$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)

應該注意的是上述命令並不會從任何遠程倉庫中移除這個標籤,假如此標籤已經上傳到遠程倉庫,你必須使用 git push <remote> :refs/tags/<tagname> 來更新你的遠程倉庫:

$ git push origin :refs/tags/v1.4-lw
To /[email protected]:schacon/simplegit.git
 - [deleted]         v1.4-lw

檢出標籤

如果你想查看某個標籤所指向的文件版本,可以使用 git checkout 命令,雖然說這會使你的倉庫處於“分離頭指針(detacthed HEAD)”狀態——這個狀態有些不好的副作用:

$ git checkout 2.0.0
Note: checking out '2.0.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch>

HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final

$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image

在“分離頭指針”狀態下,如果你做了某些更改然後提交它們,標籤不會發生變化,但你的新提交將不屬於任何分支,並且將無法訪問,除非確切的提交哈希。因此,如果你需要進行更改——比如說你正在修復舊版本的錯誤——這通常需要創建一個新分支:

$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

當然,如果在這之後又進行了一次提交,version2 分支會因爲這個改動向前移動,version2 分支就會和 v2.0.0 標籤稍微有些不同,這時就應該當心了。所以這種情況,我們應該先創建分支並從tag上去拉取分支。

 

發佈了92 篇原創文章 · 獲贊 8 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章