20200616——git複習 指令與邏輯

Git工作流程

工作流程如下

克隆git資源作爲工作目錄
在克隆的資源上添加或者修改文件
如果他人修改了,你可以更新資源
在提交前查看修改
提交修改
在修改完成之後,如果發現錯誤,可以撤回提交併在此修改並提交

在這裏插入圖片描述

Git工作區,暫存區和版本庫

基本概念

工作區

就是你在電腦能看到的目錄

暫存區

英文叫stage,或者index,一般存放在.git目錄下面index文件(.git/index)中,所以我們把暫存區有時候也叫索引(index)

版本庫

工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫

看圖說話

在這裏插入圖片描述

左側工作區,右側版本庫,在版本庫中標記的“index”的區域是暫存區(stage,index),標記爲master的是master分支所代表的目錄樹。

當對工作區修改(或新增)的文件執行 “git add” 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。

當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。

當執行 “git reset HEAD” 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。

當執行 "git rm --cached " 命令時,會直接從暫存區刪除文件,工作區則不做出改變。

當執行 “git checkout .” 或者 "git checkout – " 命令時,會用暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區中未添加到暫存區的改動。

當執行 “git checkout HEAD .” 或者 "git checkout HEAD " 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區和以及工作區中的文件。這個命令也是極具危險性的,因爲不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。

Git創建倉庫

我們可以使用一個已經存在的目錄作爲倉庫

git init

git使用git init命令來初始化一個git倉庫,git的很多命令都需要在git的倉庫中運行,所以git init 就是git的第一個命令

在執行完git init 命令之後,git倉庫會生成.git目錄,該目錄包含了資源的所有的元數據,其他的項目目錄保持不變。

git clone

我們使用git clone從現有的git倉庫中拷貝項目

如果要自己定義要新建的項目目錄名稱,可以在上面的命令末尾指定新的名字:

git clone git://github.com/schacon/grit.git mygrit

Git基本操作

git的工作就是創建和保存你項目的快照及之後的快照進行對比。

git add

git add 命令可將該文件添加到緩存,如我們添加以下兩個文件:

touch mmz.txt
touch zjz.txt

用git status 查看
在這裏插入圖片描述
把文件添加到暫存區
在這裏插入圖片描述

git status

git status以查看在你上次提交了之後是否有修改
-s 參數,以獲得簡短的結果輸出,如果不加參數會輸出詳細的內容

git diff

執行 git diff 來查看執行 git status 的結果的詳細信息。
git diff 命令顯示已寫入緩存與已修改但尚未寫入緩存的改動的區別。git diff 有兩個主要的應用場景。

git commit

使用 git add 命令將想要快照的內容寫入緩存區, 而執行 git commit 將緩存區內容添加到倉庫中。

Git 爲你的每一個提交都記錄你的名字與電子郵箱地址,所以第一步需要配置用戶名和郵箱地址。

如果你沒有設置 -m 選項,Git 會嘗試爲你打開一個編輯器以填寫提交信息。 如果 Git 在你對它的配置中找不到相關信息,默認會打開 vim。

如果你覺得 git add 提交緩存的流程太過繁瑣,Git 也允許你用 -a 選項跳過這一步。

git reset HEAD

git reset HEAD 命令用於取消已緩存的內容
抵消了add
簡而言之,執行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的緩存

git rm

如果只是簡單地從工作目錄中手工刪除文件,運行 git status 時就會在 Changes not staged for commit 的提示。

要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除,然後提交。可以用以下命令完成此項工作

git rm <file>

如果刪除之前修改過並且已經放到暫存區域的話,則必須要用強制刪除選項 -f

git rm -f <file>

如果把文件從暫存區域移除,但仍然希望保留在當前工作目錄中,換句話說,僅是從跟蹤清單中刪除,使用 --cached 選項即可

git rm --cached <file>

git mv

git mv 命令用於移動或重命名一個文件、目錄、軟連接。

Git分支管理

幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味着你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。

有人把 Git 的分支模型稱爲必殺技特性,而正是因爲它,將 Git 從版本控制系統家族裏區分出來。

創建分支命令:

git branch (branchname)

切換分支命令:

git checkout (branchname)

合併分支命令:

git merge 

我們也可以使用 git checkout -b (branchname) 命令來創建新分支並立即切換到該分支下,從而在該分支中操作。

刪除分支

git branch -d (branchname)

分支合併
一旦某分支有了獨立內容,你終究會希望將它合併回到你的主分支。 你可以使用以下命令將任何分支合併到當前分支中去:

git merge otherbranch

相當於你在當前的分支,把其他的分支給合併

Git 查看提交歷史

我們可以使用git log 查看提交歷史。

git log

我們可以用 --oneline 選項來查看歷史記錄的簡潔的版本。

git log --oneline

我們還可以用 --graph 選項,查看歷史中什麼時候出現了分支、合併。

git log --graph

Git標籤

我們想爲我們的 runoob 項目發佈一個"1.0"版本。 我們可以用 git tag -a v1.0 命令給最新一次提交打上(HEAD)"v1.0"的標籤。

git tag -a v1.0 

如果我們忘了給某個提交打標籤,又將它發佈了,我們可以給它追加標籤。

git tag -a v0.9 85fc7e7

Git遠程倉庫

Git 並不像 SVN 那樣有個中心服務器。

目前我們使用到的 Git 命令都是在本地執行,如果你想通過 Git 分享你的代碼或者與其他開發人員合作。 你就需要將數據放到一臺其他開發人員能夠連接的服務器上。

添加遠程庫

git remote add [shortname] [url]

由於你的本地 Git 倉庫和 GitHub 倉庫之間的傳輸是通過SSH加密的,所以我們需要配置驗證信息:

使用以下命令生成 SSH Key:

ssh-keygen -t rsa -C "[email protected]"

後面的 [email protected] 改爲你在 Github 上註冊的郵箱,之後會要求確認路徑和輸入密碼,我們這使用默認的一路回車就行。成功的話會在 ~/ 下生成 .ssh 文件夾,進去,打開 id_rsa.pub,複製裏面的 key。

回到 github 上,進入 Account => Settings(賬戶配置)。

查看當前的遠程庫

git remote
$ git remote
origin
$ git remote -v
origin    [email protected]:tianqixin/runoob-git-test.git (fetch)
origin    [email protected]:tianqixin/runoob-git-test.git (push)

推送到遠程倉庫

git push [alias] [branch]

刪除遠程倉庫

git remote rm [別名]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章