關于git分支

1.關于git分支

git的“分支”乍一聽是一個特別容易讓人產生錯覺的概念,以為它和樹枝一樣是分叉的枝節,其實Git中的分支本質上是個指向commit對象的指針,每次commit,git都把它們串成一條時間線,這條時間線就是一個分支。

2.直接切換分支的兩種結果

一般我們在切換分支前,最好先提交commit(或者儲藏stash)下在當前分支的修改。 多數情況我們沒有提交(或者儲藏)當前分支的修改是切換不了分支的,也有一些特殊情況下不提交修改依然可以成功切換分支。

當分支a和分支b在同一提交點時,(可能是剛互相合并完成也可能是a分支是基于b分支的當前提交點新建的),即使在某一個分支下修改了內容(修改文件、創建文件、刪除文件)后不提交依然能成功切換分支(剛剛修改的內容會被帶到新切換到的分支),于此同時git會提示:

bogon:weddingH5 jj$ git checkout a
D       css/index.css(被刪除的文件)
M       index.html(被修改的文件)
Switched to branch 'a'
復制代碼

此時你可以在隨意切換a和b分支,并可選擇在a和b任一分支上提交現在的修改。

否則會切換分支失敗,與此同時git會提示:

error: Your local changes to the following files would be overwritten by checkout:index.html(你修改的文件)
Please commit your changes or stash them before you switch     branches.
復制代碼

3.切換分支先提交commit

4.切換分支前先儲藏stash

使用git的時候,我們往往使用branch解決任務切換問題,例如,我們往往會建一個自己的分支去修改和調試代碼, 如果別人或者自己發現原有的分支上有個不得不修改的bug,我們往往會把完成一半的代碼 commit提交到本地倉庫,然后切換分支去修改bug,改好之后再切換回來。這樣的話往往log上會有大量不必要的記錄。其實如果我們不想提交完成一半或者不完善的代碼,但是卻不得不去修改一個緊急Bug,那么使用’git stash’就可以將你當前未提交到本地(和服務器)的代碼推入到Git的棧中,這時候你的工作區間和上一次提交的內容是完全一樣的,所以你可以放心的修 Bug,等到修完Bug,提交到服務器上后,再使用’git stash apply’將以前一半的工作應用回來。當你多次使用’git stash’命令后,你的棧里將充滿了未提交的代碼,這時候你會對將哪個版本應用回來有些困惑,’git stash list’命令可以將當前的Git棧信息打印出來,你只需要將找到對應的版本號,例如使用’git stash apply stash@{1}’就可以將你指定版本號為stash@{1}的工作取出來,當你將所有的棧都應用回來的時候,可以使用’git stash clear’來將棧清空。

介紹地址

需要提醒的是,你可以在某一分支上儲藏,然后在任一分支上應用這些儲藏。git stash apply會默認應用當前儲藏列表(用git stash list查看)中最新的儲藏,要想指定應用某一儲藏,可以用類似git stash apply stash@{2} 這樣的命令。

5.什么時候會出現合并沖突

廖雪峰老師的網站地址 當兩個分支出現下圖這種情況時,合并兩個分支可能會發生沖突

圖示這種情況代表兩個分支指針指向了兩個已經更新過的提交對象(這里mater和feature1都在原來的基礎上提交修改了一次,其實和次數無關,不要被誤導),此時合并分支時,只要合并前兩個分支中最新的兩次提交包含了同一個文件中同一個位置的修改則會出現合并沖突,否則如果不是同一個位置,即使是同一個文件也不會出現沖突。

如何解決沖突? 只能手動解決沖突,如果涉及到其他開發者,最好和其他開發者當面商量后一起解決。

6. git tag

6.1 git tag是什么

tag , 翻譯過來是標簽的意思,顧名思義,標簽是為了標記某種事物。 tag 是 Git 版本庫的一個快照,指向某個 commit 的指針。

6.2 使用git tag的好處

tag 的存在,是因為我們需要這種標記的功能。目前的項目開發中,當發布版本時 tag 就派上用場了。例如 v1.0.1,v1.0.2… 另外,git 提供了 tag 的增刪改查一系列操作,在 tag 的使用上,可謂非常之方便。

6.3 tag 和 branch 的區別以及使用場景

想到這里,你可能覺得 tag 和 branch 有點相似。沒錯,的確是有點像,但是它們的職責分工和本質都是不同的。 **tag 對應某次 commit, 是一個點,是不可移動的。 ** branch 對應一系列 commit,是很多commit點連成的一根時間線。

所以,兩者的區別決定了使用方式,改動代碼用 branch ,不改動只查看用 tag。

tag 和 branch 的相互配合使用,有時候起到非常方便的效果,例如 已經發布了 v1.0 v2.0 v3.0 三個版本,這個時候,我突然想不改現有代碼的前提下,在 v2.0 的基礎上加個新功能,作為 v4.0 發布。就可以 檢出 v2.0 的代碼作為一個 branch ,然后作為開發分支。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253891.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253891.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253891.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器學習經典算法源碼分析系列】-- 邏輯回歸

1.邏輯回歸(Logistic Regression)又常被成為“邏輯斯蒂回歸”,實質上是一個二元分類問題。 邏輯回歸代價函數: 代價函數導數: Matlab實現: 采用matlab中自帶的無約束最小化函數fminunc來代替梯度下降法&…

求特殊自然數

總時間限制: 1000ms 內存限制: 65536kB 描述一個十進制自然數,它的七進制與九進制表示都是三位數,且七進制與九進制的三位數碼表示順序正好相反。編程求此自然數,并輸出顯示。 輸入無。輸出三行:第一行是此自然數的十進制表示;第一行是此自然…

ROS——不同版本間ROS進行通信

在相同版本間的ROS進行通信不在贅述了,修改/etc/hosts文件即可。 最近項目遇到在Ubuntu16.04 與Ubuntu18.04兩個系統間進行ROS通信,ROS版本分別為Kinetic和Melodic。配置網絡后,兩邊都能夠ping通,但是在獲取ros數據是&#xff0c…

大數據開發實戰:數據流圖及相關數據技術

1、大數據流程圖 2、大數據各個環節主要技術 2.1、數據處理主要技術 Sqoop:(發音:skup)作為一款開源的離線數據傳輸工具,主要用于Hadoop(Hive) 與傳統數據庫(MySql,PostgreSQL)間的數據傳遞。它…

oracle 中時間類型 date 與 long 互轉

我們在保存時間到數據庫時,有時候會保存long型的數據,固定長度是13位,是用當前時間減去1970-01-01,再換算成毫秒得到的結果。 但是要考慮到時區問題中國的時區時8區所以時間要加上8小時 oracle中的實現方式: ---------…

Linux對包管理闡述

Centos/Redhat/Fedora的軟件包,都是rpm后綴的文件。包管理器rpm(Redhat packages manager) linux的哲學思想是簡單命令解決復雜任務,因此每個軟件的功能較單一,所以各種包之間有著復雜的依賴關系,為了解決這種可以使用前端工具&am…

跨時鐘域電路設計——亞穩態及雙鎖存器

一、同步電路 定義:電路中所有受時鐘控制的單元,全部由一個統一的時鐘控制。 優點:在同步設計中,EDA工具可以保證電路系統的時序收斂,避免電路設計中的競爭冒險。 缺點:時鐘樹綜合需要加入大量延遲單元&…

linux setsockopt詳解

1.closesocket(一般不會立即關閉而經歷TIME_WAIT的過程)后想繼續重用該socket: BOOL bReuseaddrTRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已經處于連接狀態的soket在調用closes…

[TOOLS] 移動端調試進行時 - whistle

1、本地安裝、啟動whistle 安裝實操請查看官方文檔不贅述 復制代碼 2、手機設置代理 實操請查看官方文檔 !!!注意:代理ip填寫whistle右上角online選項中的ip 復制代碼 3、whistle上設置對應rules、weinre whistle設置代理(!!!注意支持tunnel協議): rules…

函數動態參數實現format

變量賦值一種是字符串格式化,一種是通過format的方式 1.字符串格式化 s"i am %s,age %d"%(Jasper,23)print(s)打印輸出:i am Jasper,age 232.format格式化 s"i am {name},age {age}".format(namejasper,age23)print(s)或 s2"i …

跨時鐘域電路設計——單bit信號

前面提到了簡單的雙電平鎖存器,下面是一些單bit同步電路。 一、慢時鐘域向快時鐘域 邊沿檢測同步器 將慢時鐘域的脈沖搬移并縮小為快時鐘域的脈沖。 既可以檢測上升沿,也可以檢測下降沿。 如上圖,慢時鐘下一個有效脈沖的最短周期為慢時鐘的…

數據同步 rsync+notify架構

rsync 同步命令,非常好用 notify是監控本地文件的變化的 、安裝配置 1. 安裝rsync,inotify-tools sudo apt-get install rsync inotify-tools 2. 拷貝rsync配置文件 mkdir /etc/rsync cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsync/ 3. 服…

OC_KVC與KVO簡單介紹

KVC KVC概述 KVC 即 Key-value coding 鍵值編碼,是指iOS的開發中,可以允許開發者通過Key名直接訪問對象的屬性,或者給對象的屬性賦值。 KVC案例 interface Person : NSObjectproperty (nonatomic,assign) int age; property (nonatomic,copy)…

C語言100例01 PHP版(練習)

題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少? 程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。 代碼: 1 for($i1;$i&l…

嵌入式根文件系統制作

1:文件系統分類: 基于flash的文件系統:flash有兩種,一種是NOR,另一種NAND。NOR型 FLASH主要用于存放程序。NAND型 FLASH主要用于存放數據。NOR的特點是可在芯片內執行。這樣應用程序可以直接在flash內存內運行,不必再把代碼讀到…

跨時鐘域電路設計——結繩法

信號從快時鐘域到慢時鐘域過渡時,慢時鐘可能無法對快時鐘變化太快的信號進行采樣。 之前的同步器法對兩個時鐘間的關系有要求,結繩法適用于任何時鐘域之間的過渡。 結繩法的原理是將快時鐘信號的脈沖周期延長,等到慢時鐘周期采樣后再“解繩”…

我之理解---計時器setTimeout 和clearTimeout

今天在寫個圖片切換的問題 有動畫滯后的問題,才動手去查setTimeout 和clearTimeout。之前寫的圖片播放器也有類似的問題,有自動start按鈕 和stop按鈕, 其他都正常,問題出在每次多次快速的點擊start按鈕時,圖片播放的速…

002服務提供者Eureka

1、POM配置 和普通Spring Boot工程相比&#xff0c;僅僅添加了Eureka、Spring Boot Starter Actuator依賴和Spring Cloud依賴管理 <dependencies><!--添加Eureka Server依賴--><dependency><groupId>org.springframework.cloud</groupId><art…

使用Busybox構造cramfs根文件系統

使用Busybox構造cramfs根文件系統 11.1、下載Busybox&#xff0c;如果系統中沒有mkcramfs工具則還要下載mkcramfs壓縮工具。本文件系統使用Busybox-1.10.1&#xff0c;cramfs-1.1。壓縮文件Busybox-1.10.1.tar.bz2&#xff0c;cramfs-1.1.tar.gz。 22.解壓文件&#xff1a; tar…

關于二維碼分塊上色(彩色二維碼)的算法研究

原文:關于二維碼分塊上色&#xff08;彩色二維碼&#xff09;的算法研究眾所周知&#xff0c;二維碼通常是黑白的&#xff0c;而且是由若干個長方形或正方形小塊平鋪而成。但從人們的審美角度來看&#xff0c;常見的黑白二維碼不免讓人審美疲勞。本文試著從分塊上色的角度對二維…