国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

git 工具使用--分支管理

這篇具有很好參考價(jià)值的文章主要介紹了git 工具使用--分支管理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

git 工具使用–分支管理

理解分支

分支管理是Git的殺手級(jí)功能之一。分支:就是科幻中的平行宇宙,當(dāng)你正在電腦面前學(xué)習(xí)C++的時(shí)候,另一個(gè)你正在另外一個(gè)平行宇宙里面學(xué)習(xí)Java。如果兩個(gè)平行宇宙互不干擾,那對(duì)現(xiàn)在的你也沒啥影響。不過,在某個(gè)時(shí)間點(diǎn),兩個(gè)平時(shí)宇宙合并了,結(jié)果,你既學(xué)習(xí)了C++,也學(xué)習(xí)了Java.

在版本回退里,你已經(jīng)知道,每次提交,Git都把他們串成一條時(shí)間線,這條時(shí)間線就可以理解是一個(gè)分支。截止到目前,在Git里,這個(gè)分支叫主分支,即 master 分支。

再來理解一下HEAD,HEAD嚴(yán)格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當(dāng)前分支。

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

每次提交,master分支都會(huì)向前移動(dòng)一次,這樣隨著你不斷的提交,master分支的線也越來越長,而HEAD只要一直指向master分支即可指向當(dāng)前分支。

我們可以使用git log來驗(yàn)證:

[Lxy@aliyun gitcode]$ cat .git/HEAD 
ref: refs/heads/master
[Lxy@aliyun gitcode]$ cat .git/refs/heads/master 
7804665c14faf8e894e023f04576ba6b17632f85
[Lxy@aliyun gitcode]$ git log
commit 7804665c14faf8e894e023f04576ba6b17632f85
Author: Lxy <2357246060@qq.com>
Date:   Mon Jun 26 13:48:27 2023 +0800

    delete file1

創(chuàng)建分支

Git支持我們查看或創(chuàng)建其他分支,在這里我們來創(chuàng)建第一個(gè)自己的分支dev,對(duì)應(yīng)的命令為:

查看當(dāng)前本地所有分支

git branch

*表示當(dāng)前HEAD指向的分支是master分支。

[Lxy@aliyun gitcode]$ git branch
* master

創(chuàng)建新的分支

git branch dev # 新建分支dev
[Lxy@aliyun gitcode]$ git branch dev
[Lxy@aliyun gitcode]$ git branch
  dev
* master

當(dāng)我們創(chuàng)建新的分支后,Git新建了一個(gè)指針叫dev,創(chuàng)建完成后,我們使用git branch來查看當(dāng)前有的分支。

另外,也可以通過目錄結(jié)構(gòu)看到新的分支:

[Lxy@aliyun gitcode]$ tree .git/refs/heads/
.git/refs/heads/
├── dev
└── master

0 directories, 2 files
[Lxy@aliyun gitcode]$ ls .git/refs/heads/
dev  master
[Lxy@aliyun gitc

發(fā)現(xiàn)目前dev和master指向同一個(gè)修改。并且也可以驗(yàn)證下HEAD目前是指向master的。

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

切換分支

現(xiàn)在已經(jīng)成功創(chuàng)建了新的dev分支,那么如何切換到dev分支下進(jìn)行開發(fā)呢?使用git checkout命令即可完成切換:

[Lxy@aliyun gitcode]$ git checkout dev
Switched to branch 'dev'
[Lxy@aliyun gitcode]$ git branch
* dev
  master
[Lxy@aliyun gitcode]$ cat .git/HEAD 
ref: refs/heads/dev

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

此時(shí),HEAD已經(jīng)指向了dev,就表示我們已經(jīng)成功的切換到了dev上!接下來,在dev分支上修改ReadMe文件,新增一行內(nèi)容,并進(jìn)行一次提交操作。

[Lxy@aliyun gitcode]$ vim ReadMe 
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!
[Lxy@aliyun gitcode]$ git add .
[Lxy@aliyun gitcode]$ git commit -m "modify ReadMe"
[dev 2690f7f] modify ReadMe
 1 file changed, 2 insertions(+)
[Lxy@aliyun gitcode]$ git status
# On branch dev
nothing to commit, working directory clean

現(xiàn)在,dev分支的工作完成,我們就可以切回master分支:

[Lxy@aliyun gitcode]$ git checkout master 
Switched to branch 'master'
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

切換回master分支后,發(fā)現(xiàn)ReadMe文件中新增的內(nèi)容不見了?。∥覀?cè)偾谢?code>dev看看

[Lxy@aliyun gitcode]$ git checkout dev
Switched to branch 'dev'
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!

dev分支上,內(nèi)容還在,為什么會(huì)出現(xiàn)這個(gè)現(xiàn)象呢?我們?cè)賮砜纯?code>dev分支和master分支指向,發(fā)現(xiàn)兩個(gè)指向的提交是不一樣的:

[Lxy@aliyun gitcode]$ cat .git/refs/heads/dev 
2690f7fcf1ccc686ffd88d2780140d4cc1cd493f
[Lxy@aliyun gitcode]$ cat .git/refs/heads/master 
7804665c14faf8e894e023f04576ba6b17632f85

[Lxy@aliyun gitcode]$ git cat-file -p 2690f7fcf1ccc686ffd88d2780140d4cc1cd493f
tree 68c0c174cb2cbb0258f1979bfa92ff0fe06ec5d6
parent 7804665c14faf8e894e023f04576ba6b17632f85
author Lxy <2357246060@qq.com> 1689396001 +0800
committer Lxy <2357246060@qq.com> 1689396001 +0800

modify ReadMe

看到這里我們就能明白了,因?yàn)槲覀兪窃?code>dev分支上提交的,而master分支此刻的提交點(diǎn)并沒有變,此時(shí)的狀態(tài)如圖所示:

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

切換到 master分支時(shí),HEAD就指向了master,當(dāng)然看不到提交了。

合并分支

為了在master主分支上能看到新的提交,就需要將dev分支合并到master分支,示例如下:

[Lxy@aliyun gitcode]$ git checkout master #切換到master上進(jìn)行合并
Switched to branch 'master'
[Lxy@aliyun gitcode]$ git merge dev # 合并dev分支
Updating 7804665..2690f7f
Fast-forward
 ReadMe | 2 ++
 1 file changed, 2 insertions(+)
[Lxy@aliyun gitcode]$ cat ReadMe # 發(fā)現(xiàn)已經(jīng)成功了
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!

git merge命令用于合并指定分支到當(dāng)前分支。合并后,master就能夠看到dev分支提交的內(nèi)容。

[Lxy@aliyun gitcode]$ cat .git/refs/heads/master 
2690f7fcf1ccc686ffd88d2780140d4cc1cd493f
[Lxy@aliyun gitcode]$ cat .git/refs/heads/dev 
2690f7fcf1ccc686ffd88d2780140d4cc1cd493f
[Lxy@aliyun gitcode]$ cat .git/HEAD 
ref: refs/heads/master

此時(shí)的狀態(tài)圖如下所示:

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

Fast-forward代表"快進(jìn)模式",也就是直接把master指向dev的當(dāng)前提交,所以合并速度非常快,當(dāng)然,也不是每次合并都能Fast-forward。

刪除分支

合并完成后,dev分支對(duì)于我們來說就沒用了,那么dev分支就可以被刪除掉,注意如果當(dāng)前正處于某分支下,就不能刪除當(dāng)前分支,如:

[Lxy@aliyun gitcode]$ git branch -d dev
Deleted branch dev (was 2690f7f).
[Lxy@aliyun gitcode]$ tree .git/refs/heads/
.git/refs/heads/
└── master

0 directories, 1 file

此時(shí)的狀態(tài)如下圖所示:

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

因?yàn)閯?chuàng)建、合并、刪除分支非??欤訥it鼓勵(lì)我們使用分支完成某個(gè)任務(wù),合并后再刪除分支,這和直接在master分支上工作效果是一樣的,但過程更安全。

合并沖突

可是,在實(shí)際分支合并的時(shí)候,并不是想合并就能合并成功的,有時(shí)我們可能遇到代碼沖突的問題。為了演示這個(gè)問題,我們創(chuàng)建一個(gè)新的分支dev1,并切換到目標(biāo)分支,我們可以使用git checkout -b dev1 一步完成創(chuàng)建并切換的動(dòng)作。

[Lxy@aliyun gitcode]$ git checkout -b dev1
Switched to a new branch 'dev1'
[Lxy@aliyun gitcode]$ git branch 
* dev1
  master

dev1分支下修改ReadMe文件,更改文件內(nèi)容如下,并進(jìn)行一次提交:

[Lxy@aliyun gitcode]$ vim ReadMe 
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!

I am Coding in dev1......   #新增內(nèi)容
[Lxy@aliyun gitcode]$ git add .  #提交修改
[Lxy@aliyun gitcode]$ git commit -m "md ReadMe" 
[dev1 50ba571] md ReadMe
 1 file changed, 2 insertions(+)

切換至master,觀察ReadMe文件內(nèi)容:

[Lxy@aliyun gitcode]$ git checkout master  #切換至master分支
Switched to branch 'master'
[Lxy@aliyun gitcode]$ git branch 	#查看當(dāng)前所有分支
  dev1
* master
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!

我們發(fā)現(xiàn),切回來之后,文件內(nèi)容又變成了老的版本,這和我們預(yù)期一致,我們現(xiàn)在也能夠理解。此時(shí)在master分支上,我們對(duì)ReadMe文件再進(jìn)行一次修改,并進(jìn)行提交,如下:

[Lxy@aliyun gitcode]$ vim ReadMe 
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!


i am Coding in master ......
[Lxy@aliyun gitcode]$ git add .
[Lxy@aliyun gitcode]$ git commit -m "md ReadMe"
[master a8d6985] md ReadMe
 1 file changed, 3 insertions(+)

現(xiàn)在,master分支和dev1分支都有各自的新的提交變成了這樣:
git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

這種情況下,Git只能試圖把各自的修改合并起來,但這種合并就可能會(huì)有沖突,如下所示:

[Lxy@aliyun gitcode]$ git merge dev1 #合并dev1到master
Auto-merging ReadMe
CONFLICT (content): Merge conflict in ReadMe
Automatic merge failed; fix conflicts and then commit the result.
[Lxy@aliyun gitcode]$ git status  #查看當(dāng)前狀態(tài)
# On branch master
# You have unmerged paths.
#   (fix conflicts and run "git commit")
#
# Unmerged paths:
#   (use "git add <file>..." to mark resolution)
#
#	both modified:      ReadMe
#
no changes added to commit (use "git add" and/or "git commit -a")

發(fā)現(xiàn)ReadMe文件有沖突后,可以直接查看文件內(nèi)容,要說的是Git會(huì)用<<<<<<<,============,>>>>>>>>>>>>>來標(biāo)記出不同的分支的沖突內(nèi)容,如下圖所示:

[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!

<<<<<<< HEAD

i am Coding in master ......
=======
I am Coding in dev1......
>>>>>>> dev1

此時(shí)我們必須要手動(dòng)調(diào)整沖突代碼,并且需要再次提交修改后的結(jié)果(再次提交很重要,切勿忘記)

[Lxy@aliyun gitcode]$ vim ReadMe 
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!

i am Coding in master ......
I am Coding in dev1.....
[Lxy@aliyun gitcode]$ git add .
[Lxy@aliyun gitcode]$ git commit -m "md ReadMe"
[master 832d4a2] md ReadMe

到這里沖突就解決了,此時(shí)的狀態(tài)變成了

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

用帶參數(shù)的git log也可以看到分支的合并過程

[Lxy@aliyun gitcode]$ git log --graph --pretty=oneline --abbrev-commit
*   832d4a2 md ReadMe
|\  
| * 50ba571 md ReadMe
* | a8d6985 md ReadMe
|/  
* 2690f7f modify ReadMe
* 7804665 delete file1
* 2f86525 第三次修改ReadMe
* 02716a9 修改ReadMe
* 0c3e2b8 add file2
* cfd11ac add file
* 3b64204 add first file

最后不要忘記dev1分支使用完畢后就可以刪除了:

[Lxy@aliyun gitcode]$ git branch
  dev1
* master
[Lxy@aliyun gitcode]$ git branch -d dev1
Deleted branch dev1 (was 50ba571).
[Lxy@aliyun gitcode]$ git branch
* master

分支管理策略

通常合并分支時(shí),如果可能,Git會(huì)采用Fast forward模式。在這種Fast forward模式下,刪除分支后,查看分支歷史時(shí),會(huì)丟掉分支信息,看不出來最新提交到底是 merge進(jìn)來的還是正常提交的。

但是合并沖突部分,我們也看到通過解決沖突問題,會(huì)再進(jìn)行一次新的提交,得到的最終狀態(tài)為:

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

那么這種就不是Fast forward模式了,這樣的好處是,從分支歷史上就可以看出分支信息。例如我們現(xiàn)在已經(jīng)刪除了在合并沖突部分創(chuàng)建的dev1分支,但依舊能看到 master其實(shí)是由其他分支合并得到:

[Lxy@aliyun gitcode]$ git branch #查看當(dāng)前分支
* master
[Lxy@aliyun gitcode]$ git branch dev1 #創(chuàng)建dev1分支
[Lxy@aliyun gitcode]$ git checkout dev1 #切換到dev1分支
Switched to branch 'dev1'
[Lxy@aliyun gitcode]$ git branch 
* dev1
  master
[Lxy@aliyun gitcode]$ vim ReadMe  #修改ReadMe文件
[Lxy@aliyun gitcode]$ git add .   #提交修改
[Lxy@aliyun gitcode]$ git commit -m "md ReadMe"
[dev1 f41d236] md ReadMe
 1 file changed, 3 insertions(+)
[Lxy@aliyun gitcode]$ git checkout master #切換到master分支
Switched to branch 'master'
[Lxy@aliyun gitcode]$ git merge --no-ff -m "merge dev1" dev1 #將dev1分支使用no-ff方式合并到master分支
Merge made by the 'recursive' strategy.
 ReadMe | 3 +++
 1 file changed, 3 insertions(+)
[Lxy@aliyun gitcode]$ cat ReadMe #查看ReadMe文件內(nèi)容
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!

i am Coding in master ......
I am Coding in dev1.....


I am Coding in dev1..................
[Lxy@aliyun gitcode]$ git log --graph --abbrev-commit #查看日志信息
*   commit 9c17f2d
|\  Merge: 832d4a2 f41d236
| | Author: Lxy <2357246060@qq.com>
| | Date:   Sun Jul 16 18:21:49 2023 +0800
| | 
| |     merge dev1 #這里能夠看到合并的信息
| |   
| * commit f41d236
|/  Author: Lxy <2357246060@qq.com>
|   Date:   Sun Jul 16 18:20:46 2023 +0800
|   
|       md ReadMe
|    
*   commit 832d4a2
|\  Merge: a8d6985 50ba571
| | Author: Lxy <2357246060@qq.com>
| | Date:   Sat Jul 15 13:10:06 2023 +0800
| | 
| |     md ReadMe
| |   
| * commit 50ba571
| | Author: Lxy <2357246060@qq.com>
| | Date:   Sat Jul 15 12:59:18 2023 +0800
| | 
| |     md ReadMe
| |   
* | commit a8d6985
|/  Author: Lxy <2357246060@qq.com>
|   Date:   Sat Jul 15 13:05:11 2023 +0800
|   
|       md ReadMe
|  
* commit 2690f7f
| Author: Lxy <2357246060@qq.com>
| Date:   Sat Jul 15 12:40:01 2023 +0800

Git支持我們強(qiáng)制禁用Fast forword模式,那么就會(huì)在merge時(shí)生成一個(gè)新的commit,這樣,從分支歷史上就可以看到分支信息。

說明一下:

--no--ff參數(shù),表示禁用Fast forward模式,禁用Fast forward模式后會(huì)合并會(huì)創(chuàng)建一個(gè)新的commit,所以加上-m參數(shù),把描述寫進(jìn)去。合并后可以查看歷史分支:

git log --graph --pretty=oneline --abbrev-commit

不使用Fast forward模式,merge后就像這樣:
git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

所以在合并分支時(shí),加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支,能看出來曾經(jīng)做過合并,而fast forward合并就看不出來曾經(jīng)做過合并。

分支策略

在實(shí)際開發(fā)中,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:

首先,master分支應(yīng)該是 非常穩(wěn)定的,也就是僅用發(fā)布新版本,平時(shí)不能在上面干活:因此,我們平時(shí)開發(fā)都是在dev分支上面的,也就是說,dev分支是不穩(wěn)定的,到某個(gè)時(shí)候,比如1.0版本發(fā)布時(shí),再把dev分支合并到master上,在master分支發(fā)布1.0版本.

所以,每個(gè)人都有自己的分支,時(shí)不時(shí)地往dev分支上合并就可以了。所以團(tuán)隊(duì)合作的分支看起來就像這樣:

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

bug分支

假如我們現(xiàn)在正在dev2分支上進(jìn)行開發(fā),開發(fā)到一半,突然發(fā)現(xiàn)master分支上有bug,需要解決。在Git中,每個(gè)bug都可以通過一個(gè)新的臨時(shí)分支來修復(fù),修復(fù)后,合并分支,然后將臨時(shí)分支刪除??涩F(xiàn)在dev2的代碼在工作區(qū)中開發(fā)了一般,還無法提交,Git提供了git stash命令,可以將當(dāng)前的工作區(qū)信息進(jìn)行儲(chǔ)藏,被儲(chǔ)藏的內(nèi)容可以在將來某個(gè)時(shí)間恢復(fù)出來。

[Lxy@aliyun gitcode]$ git branch dev2 #創(chuàng)建dev2分支
[Lxy@aliyun gitcode]$ git checkout dev2 #切換至dev2分支
Switched to branch 'dev2'
[Lxy@aliyun gitcode]$ vim ReadMe  #修改ReadMe文件
[Lxy@aliyun gitcode]$ cat ReadMe  #查看ReadMe文件
hello git
hello world
hello ReadMe

I am Codeing in dev2............
[Lxy@aliyun gitcode]$ git checkout master  #切換至master
M	ReadMe
Switched to branch 'master'
[Lxy@aliyun gitcode]$ cat ReadMe  #查看ReadMe文件
hello git
hello world
hello ReadMe

I am Codeing in dev2............
[Lxy@aliyun gitcode]$ git status  #查看狀態(tài)
# On branch master
# 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)
#
#	modified:   ReadMe
#
no changes added to commit (use "git add" and/or "git commit -a")
[Lxy@aliyun gitcode]$ git checkout dev2
M	ReadMe
Switched to branch 'dev2'
[Lxy@aliyun gitcode]$ git stash #儲(chǔ)存文件
Saved working directory and index state WIP on dev2: 9c17f2d merge dev1
HEAD is now at 9c17f2d merge dev1
[Lxy@aliyun gitcode]$ git status #再查看狀態(tài)
# On branch dev2
nothing to commit, working directory clean
[Lxy@aliyun gitcode]$ cat ReadMe  #再次查看master的ReadMe文件內(nèi)容發(fā)現(xiàn)恢復(fù)到之前
hello git
hello world
hello ReadMe

git --version

I am Coding in dev!

i am Coding in master ......
I am Coding in dev1.....


I am Coding in dev1..................

git status查看工作區(qū),就是干凈的(除非擁有 - 沒有被Git管理的文件),因此可以放心地創(chuàng)建分支來修復(fù)bug。

儲(chǔ)藏dev2工作區(qū)之后,由于我們要基于master分支,在創(chuàng)建臨時(shí)分支來修復(fù)bug。

[Lxy@aliyun gitcode]$ git checkout master #切回master
Switched to branch 'master'
[Lxy@aliyun gitcode]$ git checkout -b fix_bug #新建并切換到fix_bug分支
Switched to a new branch 'fix_bug'
[Lxy@aliyun gitcode]$ vim ReadMe 
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

I am fixing bug .........             #修復(fù)bug
[Lxy@aliyun gitcode]$ git add .       #重新add commit
[Lxy@aliyun gitcode]$ git commit -m "fix bug"
[fix_bug 76fef0d] fix bug
 1 file changed, 1 insertion(+), 7 deletions(-)

修復(fù)完畢后,切換到master分支,并完成合并,最后刪除fix_bug分支:

[Lxy@aliyun gitcode]$ git merge --no-ff -m "merge fix_bug" fix_bug
Merge made by the 'recursive' strategy.
 ReadMe | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

git --version

I am fixing bug .........

至此,bug地修復(fù)工作已經(jīng)做完了,我們還要繼續(xù)回到dev2分支進(jìn)行開發(fā),切換回dev2分支:

[Lxy@aliyun gitcode]$ git checkout dev2
Switched to branch 'dev2'
[Lxy@aliyun gitcode]$ git status
# On branch dev2
nothing to commit, working directory clean

工作區(qū)是干凈的???剛才我們的工作現(xiàn)場(chǎng)存到哪兒去了?可以使用git stash list命令查看

[Lxy@aliyun gitcode]$ git stash list
stash@{0}: WIP on dev2: 9c17f2d merge dev1

工作現(xiàn)場(chǎng)還在,Git把stash內(nèi)容存在某個(gè)地方了,但是需要恢復(fù)一下,如何恢復(fù)現(xiàn)場(chǎng)呢?我們可以使用git stash pop命令,恢復(fù)的同時(shí)會(huì)把stash也刪了:

[Lxy@aliyun gitcode]$ git stash pop
# On branch dev2
# 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)
#
#	modified:   ReadMe
#
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (c6b7e92f49a38afc1461bcedbaa558aa7ecd0500)
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

I am Codeing in dev2............

再次查看的時(shí)候,我們已經(jīng)發(fā)現(xiàn)沒有現(xiàn)場(chǎng)可以恢復(fù)了

[Lxy@aliyun gitcode]$ git stash list
[Lxy@aliyun gitcode]$ 

另外,恢復(fù)現(xiàn)場(chǎng)也可以采用git stash apply 恢復(fù),但是恢復(fù)后,stash內(nèi)容并不刪除,你需要用git stash drop來刪除。你可以多次stash,恢復(fù)的時(shí)候,先用``git stash list查看,然后恢復(fù)指定的stash,用命令git stash apply stash@{0}`恢復(fù)完代碼之后我們便可以繼續(xù)完成開發(fā),開發(fā)完成后便可以進(jìn)行提交。例如:

[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

I am Codeing in dev2............
[Lxy@aliyun gitcode]$ git add .
[Lxy@aliyun gitcode]$ git commit -m "md ReadMe"
[dev2 477994a] md ReadMe
 1 file changed, 1 insertion(+), 9 deletions(-)

但我們注意到了,修復(fù)bug的內(nèi)容,并沒有在dev2上顯示,此時(shí)的狀態(tài)圖為:

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

master分支目前最新的提交,是要領(lǐng)先于新建dev2時(shí)基于的master分支的提交的。所以我們?cè)?code>dev2中當(dāng)然看不見修復(fù)bug的相關(guān)代碼。我們的最終目的時(shí)讓master合并dev2分支的,那么正常情況下我們切回master分支直接合并即可,但這樣其實(shí)是有一定風(fēng)險(xiǎn)的。是因?yàn)楹喜⒎种r(shí)可能會(huì)有沖突,而代碼沖突需要我們手動(dòng)解決(在master上解決)我們無法保證對(duì)于沖突問題可以正確的一次性解決掉,因?yàn)樵趯?shí)習(xí)的項(xiàng)目中,代碼沖突不只一兩行那么簡(jiǎn)單,有可能幾十上百行,甚至更多,解決的過程中難免手誤出錯(cuò),導(dǎo)致錯(cuò)誤的代碼被合并到master上,此時(shí)的狀態(tài)為:

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

解決這個(gè)問題有一個(gè)好的建議是,最好現(xiàn)在自己的分支上合并下master,再讓master去合并dev,這樣做的目的是有沖突可以再本地分支解決并進(jìn)行測(cè)試,而不影響master

此時(shí)的狀態(tài)為:

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

git 工具使用--分支管理,工具,git,elasticsearch,大數(shù)據(jù)

對(duì)應(yīng)的實(shí)操顯示為:(要說明的是,以下演示的merge操作,沒有使用--no-ff,但上述的圖示是禁用Fast forward了模式后得出的,主要是為了方便解釋問題。)

[Lxy@aliyun gitcode]$ git branch #查看當(dāng)前分支
  dev1
* dev2
  fix_bug
  master
[Lxy@aliyun gitcode]$ git merge master  #合并master分支到dev2
Auto-merging ReadMe
CONFLICT (content): Merge conflict in ReadMe
Automatic merge failed; fix conflicts and then commit the result.
[Lxy@aliyun gitcode]$ cat ReadMe  #查看代碼
hello git
hello world
hello ReadMe

<<<<<<< HEAD
I am Codeing in dev2............
=======
git --version

I am fixing bug .........
>>>>>>> master
[Lxy@aliyun gitcode]$ vim ReadMe #修改代碼
[Lxy@aliyun gitcode]$ cat ReadMe #再次查看
hello git
hello world
hello ReadMe

I am Codeing in dev2.........
git --version 
bug is fixed .........
[Lxy@aliyun gitcode]$ git add . #add 并且 commit
[Lxy@aliyun gitcode]$ git commit -m "md ReadMe"
[dev2 8bdc3c9] md ReadMe

至此dev2上面的代碼無需沖突解決,我們?cè)偾谢豰aster合并dev2即可

[Lxy@aliyun gitcode]$ git checkout master  #切換回master
Switched to branch 'master'
[Lxy@aliyun gitcode]$ git merge dev2  #合并dev2
Updating ac63583..8bdc3c9
Fast-forward
 ReadMe | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
[Lxy@aliyun gitcode]$ cat ReadMe  #查看ReadME代碼
hello git
hello world
hello ReadMe

I am Codeing in dev2.........
git --version 
bug is fixed .........
[Lxy@aliyun gitcode]$ git branch -d dev2 #刪除dev2
Deleted branch dev2 (was 8bdc3c9).
[Lxy@aliyun gitcode]$ git branch -d fix_bug  #刪除fix_bug
Deleted branch fix_bug (was 76fef0d).
[Lxy@aliyun gitcode]$ git branch -d dev1  #刪除dev1
Deleted branch dev1 (was f41d236).
[Lxy@aliyun gitcode]$ git branch 
* master

刪除臨時(shí)分支

軟件開發(fā)中,總有?窮?盡的新的功能要不斷添加進(jìn)來。 添加?個(gè)新功能時(shí),你肯定不希望因?yàn)?些實(shí)驗(yàn)性質(zhì)的代碼,把主分?搞亂了,所以,每添加?個(gè)新功能,最好新建?個(gè)分?,我們可以將其稱之為 feature 分?,在上?開發(fā),完成后,合并,最 后,刪除該feature 分?。 可是,如果我們今天正在某個(gè)feature 分?上開發(fā)了?半,被產(chǎn)品經(jīng)理突然叫停,說是要停?新功能的開發(fā)。雖然??了,但是這個(gè)feature 分?還是必須就地銷毀,留著??了。這時(shí)使?傳統(tǒng) 的git branch -d命令刪除分?的?法是不?的。演?如下:

#新建并且切換到dev3分支
[Lxy@aliyun gitcode]$ git checkout -b dev3 
M	ReadMe
Switched to a new branch 'dev3'
#開始開發(fā)新功能并提交
[Lxy@aliyun gitcode]$ vim ReadMe  
[Lxy@aliyun gitcode]$ cat ReadMe 
hello git
hello world
hello ReadMe

I am Codeing in dev2.........
git --version 
bug is fixed .........

hello dev3
[Lxy@aliyun gitcode]$ git add .
[Lxy@aliyun gitcode]$ git commit -m "md ReadMe"
[dev3 00a37ca] md ReadMe
 1 file changed, 2 insertions(+)
 
 #此時(shí)新功能叫停
 #切回master準(zhǔn)備刪除dev3
[Lxy@aliyun gitcode]$ git checkout master 
Switched to branch 'master'
#常規(guī)刪除dev3分支時(shí)失敗
[Lxy@aliyun gitcode]$ git branch -d dev3
error: The branch 'dev3' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev3'.

直接使用傳統(tǒng)的刪除分支的方法不行,按照提示,有了如下方式:

[Lxy@aliyun gitcode]$ git branch -D dev3
Deleted branch dev3 (was 00a37ca).
[Lxy@aliyun gitcode]$ git branch
* master

總結(jié)

分?在實(shí)際中有什么?呢?假設(shè)你準(zhǔn)備開發(fā)?個(gè)新功能,但是需要兩周才能完成,第?周你寫了50% 的代碼,如果?刻提交,由于代碼還沒寫完,不完整的代碼庫會(huì)導(dǎo)致別?不能?活了。如果等代碼全 部寫完再?次提交,?存在丟失每天進(jìn)度的巨??險(xiǎn)。

現(xiàn)在有了分?,就不?怕了。你創(chuàng)建了?個(gè)屬于你??的分?,別?看不到,還繼續(xù)在原來的分?上 正常?作,?你在??的分?上?活,想提交就提交,直到開發(fā)完畢后,再?次性合并到原來的分? 上,這樣,既安全,?不影響別??作。

并且Git?論創(chuàng)建、切換和刪除分?,Git在1秒鐘之內(nèi)就能完成!?論你的版本庫是1個(gè)?件還是1萬個(gè)?件。

(本篇完)文章來源地址http://www.zghlxwxcb.cn/news/detail-599262.html

到了這里,關(guān)于git 工具使用--分支管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Git分支管理:理解主干與分支的概念及使用方法

    Git 的主干是指代碼庫中的主要分支,通常稱為 master 分支。在 master 分支上,您可以看到項(xiàng)目的最新版本,這是所有其他分支的基礎(chǔ)。當(dāng)您在 master 分支上進(jìn)行更改時(shí),這些更改將影響到所有其他分支。 分支是指從主干分支(或其他分支)分離出來的一個(gè)獨(dú)立的代碼版本。分

    2024年02月15日
    瀏覽(16)
  • git的分支的使用,創(chuàng)建分支,合并分支,刪除分支,合并沖突,分支管理策略,bug分支,強(qiáng)制刪除分支

    git的分支的使用,創(chuàng)建分支,合并分支,刪除分支,合并沖突,分支管理策略,bug分支,強(qiáng)制刪除分支

    查看當(dāng)前本地倉庫中有哪些分支 HEAD所指向的分支就是當(dāng)前正在工作的分支 創(chuàng)建一個(gè)分支 創(chuàng)建好了,但是目前還是指向 master 用tree命令也可以看到已經(jīng)創(chuàng)建分支成功了 創(chuàng)建出來的分支,和主分支的最新記錄是一樣的 切換分支就是讓HEAD指向我們的dev分支 我們?cè)赿ev分支上堆R

    2024年02月04日
    瀏覽(125)
  • 從私有Git倉庫的搭建到命令的使用及部署再到分支管理

    從私有Git倉庫的搭建到命令的使用及部署再到分支管理

    1. 版本控制系統(tǒng): git ? 分布式 ?—沒有中心代碼庫,所有機(jī)器之間的地位同等(每臺(tái)機(jī)器上都有相同的代碼) svn ?集中管理的 —有中心代碼庫,其他都是客戶端 2.git與svn介紹 1.git屬于 分布式版本控制系統(tǒng) 2.svn屬于 集中式的版本控制系統(tǒng) 面試題:Git和SVN的區(qū)別? 3.git 相關(guān)

    2024年01月21日
    瀏覽(24)
  • Git管理神器SourceTree使用教程詳解(連接遠(yuǎn)程倉庫,克隆,拉取,提交,推送,新建/切換/合并分支,沖突解決,提交PR)

    Git管理神器SourceTree使用教程詳解(連接遠(yuǎn)程倉庫,克隆,拉取,提交,推送,新建/切換/合并分支,沖突解決,提交PR)

    俗話說的好工欲善其事必先利其器,Git分布式版本控制系統(tǒng)是我們?nèi)粘i_發(fā)中不可或缺的。目前市面上比較流行的Git可視化管理工具有SourceTree、Github Desktop、TortoiseGit,綜合網(wǎng)上的一些文章分析和自己的日常開發(fā)實(shí)踐心得個(gè)人比較推薦開發(fā)者使用SourceTree,因?yàn)镾ourceTree同時(shí)支持

    2024年02月03日
    瀏覽(100)
  • git分支-分支管理

    現(xiàn)在已經(jīng)創(chuàng)建、合并和刪除了一些分支,讓我們來看看一些分支管理工具,在開始經(jīng)常使用分支時(shí)會(huì)很有用。 git branch命令不僅僅用于創(chuàng)建和刪除分支。如果不帶參數(shù)運(yùn)行它,會(huì)得到當(dāng)前分支的簡(jiǎn)單列表。 $ git branch ??iss53 * master ??Testing 這個(gè)*字符是前綴,表示當(dāng)前檢出的分

    2024年04月10日
    瀏覽(45)
  • 【Git】分支管理--創(chuàng)建新分支、刪除分支、恢復(fù)分支

    ?? 1、查看所有分支 2、切換到將要復(fù)制的現(xiàn)有分支 ??sourceBranch 為接下來要復(fù)制到新分支的現(xiàn)有分支名。創(chuàng)建的新分支依賴當(dāng)前所在分支,且新分支一旦創(chuàng)建不能更改依賴,所以要提前切換到希望復(fù)制的分支 3、創(chuàng)建新分支 ??newBranch 為新分支名 4、push內(nèi)容到新分支 ?

    2024年02月07日
    瀏覽(26)
  • 04架構(gòu)管理之分支管理實(shí)踐-一種git分支管理最佳實(shí)踐

    04架構(gòu)管理之分支管理實(shí)踐-一種git分支管理最佳實(shí)踐

    ????????專欄說明:針對(duì)于企業(yè)的架構(gòu)管理崗位,分享架構(gòu)管理崗位的職責(zé),工作內(nèi)容,指導(dǎo)架構(gòu)師如何完成架構(gòu)管理工作,完成架構(gòu)師到架構(gòu)管理者的轉(zhuǎn)變。計(jì)劃以10篇博客闡述清楚架構(gòu)管理工作,專欄名稱:架構(gòu)管理之道 ????????對(duì)于架構(gòu)管理、研發(fā)管理中,分支

    2024年02月11日
    瀏覽(31)
  • 5.git版本管理工具使用

    5.git版本管理工具使用

    git是分布式版本管理工具 版本控制? 版本控制是一種記錄文件或修改文件歷史記錄,讓用戶查看歷史版本 ? 集中版本控制 都有單一的集中管理服務(wù)器,保存所有文件的修訂版本,開發(fā)者通過客戶端連接這臺(tái)服務(wù)器,取出最新文件或提交更新 缺點(diǎn):中央服務(wù)器單點(diǎn)故障, 如

    2024年02月03日
    瀏覽(27)
  • git學(xué)習(xí)筆記 | 版本管理 - 分支管理

    git學(xué)習(xí)筆記 | 版本管理 - 分支管理

    學(xué)習(xí)文章1 學(xué)習(xí)文章2 學(xué)習(xí)文章3 Git是開源分布式版本控制系統(tǒng),版本控制是一種記錄文件內(nèi)容變化,查閱特定版本修訂情況的系統(tǒng)。 說法1 說法2 雖然有兩種說法,但大概意思是相同的,前三個(gè)區(qū)域都在本地,只有遠(yuǎn)程倉庫不在本地。 本地倉庫 = 工作區(qū) + 版本區(qū) 工作區(qū):本地

    2024年02月10日
    瀏覽(65)
  • 【Git企業(yè)開發(fā)】第四節(jié).Git的分支管理策略和bug分支

    【Git企業(yè)開發(fā)】第四節(jié).Git的分支管理策略和bug分支

    文章目錄 前言 一、Git的分支管理策略 ? ? ? 1.1?Fast forward 模式和--no-ff 模式 ? ? ? 1.2 企業(yè)分支管理策略 二、bug分支 三、刪除臨時(shí)分支 四、總結(jié) 總結(jié) 通常合并分支時(shí),如果可能,Git 會(huì)采用 Fast forward 模式。還記得如果我們采用 Fast forward 模式之后,形成的合并結(jié)果是什么

    2024年02月06日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包