Git 學習進階篇
Git brach 分支
Git可以建立多個分支,用於對不同版本程式碼分別進行維護操作。
Git對每個分支預設讀取最新commit索引。
branch操作常用命令:
命令 | 描述 | 例項 |
---|---|---|
git branch xx | 建立分支 | git branch test,建立test分支 |
git checkout xx | 切換分支 | git checkout test,切換到分支test |
Administrator@Just-pc MINGW32 /g/git_test/git_repo (master)
$ git branch test //建立test分支
$ ls //檢視master分支下檔案,只有master.d
master.d
$ git checkout test //切換到 test分支
Switched to branch 'test'
[email protected] MINGW32 /g/git_test/git_repo (test)
$ vim test.d //新增檔案 test.d
$ git add .
$ git commit -m 'first commit on branch test'
[test be2635d] first commit on branch test
1 file changed, 1 insertion(+)
create mode 100644 test.d
$ git checkout master //切換為maste分支
Switched to branch 'master'
Administrator@Just-pc MINGW32 /g/git_test/git_repo (master)
$ ls //maser分支顯示的是之前的最新的commit提交引用
master.d
如何讓引用指向某一固定提交呢?如指向某些釋出的版本, tag!
Git tag
分類:
- 輕量級,本地的引用;
- 帶註解的,就是之前儲存在g**it物件中的Git tag物件**。
相關命令:
命令 | 描述 | 例項 |
---|---|---|
git tag | 建立本地tag | git tag “V0” SHI-ID |
git tag -a | 建立註解tag | |
git show | 檢視tag內容 | git show V0 |
git checkout | 切換到tag | git checkout V0 |
首先,檢視當前的歷史記錄
$ git config --global alias.lol "log --oneline --all --decorate --graph" //定義別名
$ git lol // 顯示所有提交資訊
* be2635d (test) first commit on branch test
* 629aa7f (HEAD -> master) second commit on master
* 5154992 master.d first time commit
create tag
[email protected]-pc MINGW32 /g/git_test/git_repo (master)
$ git tag "V0" 5154992 //本地
$ git tag -a "MASTER_FIRST" 5154992 //註解
再次檢視歷史
[email protected] MINGW32 /g/git_test/git_repo (master)
$ git lol // 在索引 5154992中以包含建立的兩個tag
* be2635d (test) first commit on branch test
* 629aa7f (HEAD -> master) second commit on master
* 5154992 (tag: V0, tag: MASTER_FIRST) master.d first time commit
檢視建立的tag內容
其中,看兩者不同之處,註解方式的MASTER_FIRST tag,是一個tag物件
$ git show V0
commit 51549925f380bd46c291f02d8988d368c28ecaab
Author: xx
Date: Sun Nov 13 13:01:12 2016 +0800
[email protected]-pc MINGW32 /g/git_test/git_repo (master)
$ git show MASTER_FIRST
tag MASTER_FIRST
Tagger: xx
Date: Sun Nov 13 13:30:00 2016 +0800
MASTER_COMMIT
checkout tag
在建立tag時,已經可以看到tag也是指向某一個commit引用,所以可以使用checkout命令,切換到tag
checkout tag V0:
[email protected] MINGW32 /g/git_test/git_repo (master)
$ git checkout V0
Note: checking out 'V0'.
You are in 'detached HEAD' state. You can look around, make experimental
...
you may do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 5154992... master.d first time commit
根據提示資訊,此時處於 ‘detached HEAD’ 狀態,表示當前HEAD指向commit,而不是某個分支;我們在 ‘detached HEAD’狀態下的操作不會被儲存,除非我們使用 ‘git checkout -b ’ 命令,依據當前HEAD索引,建立新的分支,並切換到新的分支上。
為了儲存操作資訊,建立按照提示,建立新的分支 branch_V0
[email protected]-pc MINGW32 /g/git_test/git_repo ((MASTER_FIRST))
$ git checkout -b branch_V0
Switched to a new branch 'branch_V0'
對branch_V0分支進行操作,如果對資料進行了修改,則必須進行 commit或者 stash 否則無法checkout其他分支
[email protected] MINGW32 /g/git_test/git_repo (branch_V0)
$ ls //檢視檔案
master.d
$ vim master.d //修改master.d檔案
$ git add . //新增到暫存區
[email protected] MINGW32 /g/git_test/git_repo (branch_V0)
$ git checkout master //嘗試切換到master分支,發現遇到error
error: Your local changes to the following files would be overwritten by checkout:
master.d
Please, commit your changes or stash them before you can switch branches.
git stash
可以想到,在開發過程中,當前修改還沒有完成,又不得不去操作其他分支,如master分支,這時候使用stash比較合適
相關命令:
命令 | 描述 |
---|---|
git stash | 切換分支前,儲存沒有提交的修改 |
git stash save -a | 儲存當前操作記錄 |
git stash list | 檢視儲存的stash 記錄 |
git stash pop | 還原所有stash儲存時的操作(如之前我們操作matser.d檔案,還未提交) |
git stash pop –index [email protected]{n} | 還原某個stash |
git stash apply –index [email protected]{n} | 還原某個stash 但不會刪除 stash |
git stash drop [email protected]{n} | 刪除某個stash,如果不加 stash則刪除所有 |
git stash pop 與 git stash apply 區別在於前者會刪除stash ,而 apply則不會刪除 stash
[email protected] MINGW32 /g/git_test/git_repo (branch_V0)
$ git stash save -a 'stash_on_bracnV0' //儲存 stash
Saved working directory and index state On branch_V0: stash_on_bracnV0
HEAD is now at 5154992 master.d first time commit
$ ls //上面提示資訊,表示已恢復到為修改之前,即tag V0所指向索引的內容
master.d
[email protected] MINGW32 /g/git_test/git_repo (branch_V0)
$ cat master.d //檢視內容,這裡看到和 master第一次提交內容相同
111111111
當完成master分支後,返回branch_V0分支,繼續之前的修改,這時候需要檢視stash中都有哪些內容。
$ git stash list //看到[email protected]{0} 引用指向我們建立的 stash_on_branchV0
[email protected]{0}: On branch_V0: stash_on_bracnV0
還原 stash儲存的內容,執行pop操作後,會同步刪除還原的stash
$ git stash pop --index [email protected]{0} //還原stash
$ cat master.d
111111111 //master分支儲存的索引內容
modify on branch_V0 //這裡是在brachV0上儲存的索引內容
$ git stash list // 檢視stash 發現 stash_on_branchV0已經不存在了
[email protected]-pc MINGW32 /g/git_test/git_repo (branch_V0)
$
驗證git stash apply操作,重新儲存一次 stash
[email protected]-pc MINGW32 /g/git_test/git_repo (branch_V0)
$ git stash save -a 'stash_second_on_branchV0' //儲存stash
$ cat master.d // 檢視檔案內容
111111111
$ git stash list // 還原前檢視stash list
[email protected]{0}: On branch_V0: stash_onsecond_on_branchV0
$ git stash apply --index [email protected]{0} //還原 stash
On branch branch_V0
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: master.d
$ cat master.d //檢視檔案內容
111111111
modify on branch_V0
$git stash list //apply後檢視stash仍然存在
[email protected]{0}: On branch_V0: stash_onsecond_on_branchV0
Git merge 合併
Git merge命令用來合併分支上的操作
相關命令:
命令 | 描述 | 示例 |
---|---|---|
git merge | 當前分支合併某一分支中檔案 | git merge test(分支名) |
git merge –abord | 放棄合併操作 | git merge –abord test |
分支準備:
- master分支
[email protected]-pc MINGW32 /g/git_test/git_repo (master)
$ cat master.d
111111111
222222222
$ git checkout -b branch_merge //建立分支 branch_merge,(是master最新索引)
Switched to a new branch 'branch_merge'
- branch_merge分支
Administrator@Just-pc MINGW32 /g/git_test/git_repo (branch_merge)
$ vim master.d
$ git add .
$ git commit -m 'commit on branch_merge' master.d
$ cat master.d //branch_merge 分支內容
111111111
222222222
modify on branch branch_marge
- branch_V0 分支
[email protected] MINGW32 /g/git_test/git_repo (branch_merge)
$ git checkout branch_V0
$ cat master.d // branch_V0 分支內容
111111111
modify on branch_V0
現將 branch_V0分支 和 branch_merge分支內容合併到 master上
區別:barch_V0分支對master.d檔案的修改,是基於某一索引,從之前可以知道,是基於mastr的第一次索引;而 branch_merge分支是基於master的最新索引,也就相當於在master基礎上修改
先檢視下log
[email protected] MINGW32 /g/git_test/git_repo (master)
$ git lol
* 872942d (branch_merge) commit on branch_merge
| * 3b9ceaa (branch_V0) commit on branch_V0
| | * be2635d (test) first commit on branch test
| |/
|/|
* | 629aa7f (HEAD -> master) second commit on master
|/
* 5154992 (tag: V0, tag: MASTER_FIRST) master.d first time commit
合併branch_merge
[email protected] MINGW32 /g/git_test/git_repo (master)
$ git merge branch_merge
Updating 629aa7f..872942d
Fast-forward
master.d | 1 +
1 file changed, 1 insertion(+)
$ git status //很乾淨,沒有需要提交的檔案
On branch master
nothing to commit, working directory clean
從上面可以看到狀態 ‘Fast-forward’ 表示不需要進行提交等操作,和之前說的分支區別表示的意義相同。
檢視master.d內容和日誌
[email protected] MINGW32 /g/git_test/git_repo (master)
$ cat master.d
111111111
222222222
modify on branch branch_marge //分支內容已合併到master上
[email protected] MINGW32 /g/git_test/git_repo (master)
$ git lol
* 872942d (HEAD -> master, branch_merge) commit on branch_merge
| * 3b9ceaa (branch_V0) commit on branch_V0
| | * be2635d (test) first commit on branch test
| |/
|/|
* | 629aa7f second commit on master
|/
* 5154992 (tag: V0, tag: MASTER_FIRST) master.d first time commit
合併 branch_V0
[email protected] MINGW32 /g/git_test/git_repo (master)
$ git merge branch_V0
Auto-merging master.d
CONFLICT (content): Merge conflict in master.d
Automatic merge failed; fix conflicts and then commit the result.
提示狀態:Auto-mergign failed,需要修復衝突,然後提交,於是需要編輯 master.d檔案
[email protected] MINGW32 /g/git_test/git_repo (master|MERGING)
$ vim master.d
//以下是master.d檔案中的內容
111111111
<<<<<<< HEAD
222222222
modify on branch branch_marge
=======
modify on branch_V0
>>>>>>> branch_V0
~
其中,”<<<<<<< HEAD” 與 “=======” 之間表示mastet上分支內容; “=======” 與 “>>>>>>> branch_V0”之間表示branch_V0分支上內容;根據需要進行修改(刪除分支標識)後,將檔案新增進暫存區,然後提交。
[email protected] MINGW32 /g/git_test/git_repo (master|MERGING)
$ git add master.d
[email protected] MINGW32 /g/git_test/git_repo (master|MERGING)
$ git commit -m 'merge branch_V0' master.d
fatal: cannot do a partial commit during a merge.
[email protected] MINGW32 /g/git_test/git_repo (master|MERGING)
$ git commit //在 MERGIGN狀態下,提交直接使用git commit
[master d8e6e7d] Merge branch 'branch_V0'
END
- Git對分支的操作,會在分支上產生不同的引用;
- checkout切換分支,則是將HEAD切換到不用的引用上。
- tag可以指定某一索引的引用
- stash可以儲存在某一分支上未完成的修改,實際上是對工作區、暫存區內容的還原
- marge對分支內容進行合併。
more
相關推薦
Git 學習進階篇
Git brach 分支 Git可以建立多個分支,用於對不同版本程式碼分別進行維護操作。 Git對每個分支預設讀取最新commit索引。 branch操作常用命令: 命令 描述 例項 git branch xx 建
Git 學習進階篇 -歷史檢視
Git歷史記錄的檢視與對比 主要涉及到三個命令:git log 、git diff 、git show git log 命令使用 在專案提交了若干記錄,==git log== 命令可以檢視提交歷史: $ git log commit d8e6e7
剖析 git之進階篇
假設現在你正在一個目錄中開發一個剛起步的專案,忙活了一天,自己不小心按下了強制刪除的快捷鍵,或者是哪個和你關係不太好的同事刪除掉了你的專案,這個時候如果你沒有初始化(git init)過一個git倉庫,並且git add過,那對不起,從頭再來吧。但如果你已經有了一個git倉庫,並且使用過git add命令
SODBASE CEP學習進階篇(二)續:日誌採集-Logstash、Kafka和CEP整合
相比Flume,筆者更推薦使用Logstash做日誌採集,見SODBASE CEP學習進階篇(二)續:日誌採集-Logstash、Kafka和CEP整合。如果之前專案中已經選型使用Flume,則本文供參考。 1. 啟動CEP模型 啟動CEP Server ./catalina
SODBASE CEP學習進階篇(七)續:SODBASE CEP與Spark streaming整合-低延遲規則管理 與分散式快取整合
在實際大資料工作中,常常有實時監測資料庫變化或實時同步資料到大資料儲存,解決大資料實時分析的需求。同時,增量同步資料庫資料相比全量查詢也減少了網路頻寬消耗。本文以Mysql的bin-log到Kafka為例,使用Canal Server,通過SODBASE引擎不用寫程式就可以設定資料同步規則。
SODBASE CEP學習進階篇(二):日誌採集-Flume
在IT系統運維和效能監控中,常常需要對日誌進行分析,得到系統的故障點或效能瓶頸。採用現成的日誌分析軟體,通常著重於監測節點和網路狀態,幾乎都難以滿足大型應用系統對故障點或效能瓶頸分析的要求。 舉幾個例子: (1)找出故障的上下層呼叫的關係,定位應用層故障對應的底層介面 (
SODBASE CEP學習進階篇(六):實現反壓和流限速
前面文章介紹過流資料輸入速率要和處理能力相匹配,短時資料爆發由內部緩衝佇列來緩衝。如果確實存在某個時間點持續資料爆發,可以考慮採取反壓限流的方法。 1. 示例操作步驟 (1)下載SODBASE Studio2.0.22(sp1)以上版本,解壓,開啟configuration
SODBASE CEP學習進階篇(七)續:SODBASE CEP與Spark streaming整合-低延遲規則管理
許多大資料平臺專案採用流式計算來處理實時資料,會涉及到一個環節:處理規則管理。因為使用者經常有自己配置資料處理規則或策略的需求。同時,維護人員來也有也有將規則提取出來的需求,方便變更和維護的需求。我們知道Spark streaming作為資料歸檔備份時吞吐量高,與Hadoo
Vue學習筆記進階篇——多元素及多組件過渡
之前 bsp lan ssa 當前 好的 can cancel 簽名 本文為轉載,原文:Vue學習筆記進階篇——多元素及多組件過渡 多元素的過渡 對於原生標簽可以使用 v-if/v-else.但是有一點需要註意: 當有相同標簽名的元素切換時,需要通過 key 特性設置唯一
Vue學習筆記進階篇——Render函數
resp targe 無效 數據 iso 簡潔 如果 som cimage 本文為轉載,原文:Vue學習筆記進階篇——Render函數 基礎 Vue 推薦在絕大多數情況下使用 template 來創建你的 HTML。然而在一些場景中,你真的需要 JavaScript 的完全
Vue學習筆記進階篇——過渡狀態
節點 val start 學習筆記 update 設置 hub reat res 本文為轉載,原文:Vue學習筆記進階篇——過渡狀態Vue 的過渡系統提供了非常多簡單的方法設置進入、離開和列表的動效。那麽對於數據元素本身的動效呢,比如: 數字和運算 顏色的顯示 SVG 節
Vue學習筆記進階篇——列表過渡及其他
absolut compute top sla 做的 有一個 .cn -s cas 本文為轉載,原文:Vue學習筆記進階篇——列表過渡及其他本文將介紹Vue中的列表過渡,動態過渡, 以及可復用過渡是實現。 列表過渡 目前為止,關於過渡我們已經講到: 單個節點 同一時間渲染
React學習筆記之react進階篇(1)
ava 不能 success 字符 style 使用 -s 布爾 一次 1.組件的state(狀態) 1.選擇合適的state state所代表的一個組件UI呈現的完整狀態集又可以分成兩類數據:用作渲染組件時使用到的數據的來源以及用作組件UI展現形式的判斷依據。 示
React學習筆記之react進階篇(2)
-s state ops category strong tro 服務 ive 周期 2.組件與服務器通信 組件的生命周期分為三個階段:掛載階段->更新階段->卸載階段,本文主要集中講述掛載和更新階段組件如何和服務器進行通信。 1.組件掛載階段通信
Oracle RMAN 學習:演練進階篇
Oracle RMAN 學習:演練進階篇 5 Rman備份演練進階篇 5.1 是否選擇增量備份 Backup命令生成的備份集中只備份了那些使用了的資料塊,備份集實際大小已經較目標資料庫的資料檔案小了很多 備份時只備份那些修改過的資料, 如果資料庫在非歸檔模式下
php程式設計師的學習路線,以及進階篇
# PHP interview best practices in China 如果你現在處於以下幾種狀態,本資料非常適合你: * 準備換工作,不知道從哪開始準備 * 技術遇到瓶頸,不知道該學什麼 * 準備學 PHP,但不知道領域有多深 ## 基礎篇 * 瞭解大部分陣列處理函式 * 字串處
Vue學習筆記進階篇——vue-resource安裝及使用
簡介 vue-resource是Vue.js的一款外掛,它可以通過XMLHttpRequest或JSONP發起請求並處理響應。也就是說,$.ajax能做的事情,vue-resource外掛一樣也能做到,而且vue-resource的API更為簡潔。 本文是基於之前的文章(Vue學習筆記進
(3)PHP 學習筆記進階篇 from imooc
可以使用下面程式碼實現: $fruit = array("蘋果","香蕉","菠蘿"); 注意陣列的鍵是從0開始的。可以使用print_r($fruit);語句輸出陣列鍵及對應的值。 <?php //建立一個索引陣列,索引陣列的鍵是“0”,值是“蘋果” $
從頭學習爬蟲(三十六)進階篇----Selenium高階進階
引自:自上世紀末Kent Beck提出TDD(Test-Driven Development)開發理念以來,開發和測試的邊界變的越來越模糊,從原本上下游的依賴關係,逐步演變成你中有我、我中有你的互賴關係,甚至很多公司設立了新的QE(Quality Engineer)職位。和
Vue學習筆記進階篇——vue-router安裝及使用
介紹 vue-router是Vue.js官方的路由外掛,它和vue.js是深度整合的,適合用於構建單頁面應用。vue的單頁面應用是基於路由和元件的,路由用於設定訪問路徑,並將路徑和元件對映起來。傳統的頁面應用,是用一些超連結來實現頁面切換和跳轉的。在vue-ro