git入门(四)Git分支相关

创建并合并分支

git每次的提交都会把它们串成一条线,这条时间线就是一个分支。master分支这条目前仅有的时间线,叫主分支,HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以HEAD指向的就是当前分支。

起初,master分支时一条线,GIt用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。

git入门(四)Git分支相关_第1张图片

每次提交,master分支都会向前一步,随着不断的提交,master分支的线会越来越长。

当我们创建新的分支,例如dev,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。

git入门(四)Git分支相关_第2张图片

之后,对工作区的修改就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变

git入门(四)Git分支相关_第3张图片

 

如果我们的工作完成,就可以合并到master上。直接把master指向dev的当前提交。

git入门(四)Git分支相关_第4张图片

合并完分支后,可以删除dev分支。删除dev分支就是删除dev的指针。

 

演练步骤:

 

1.创建dev分支,然后切换到dev分支

git checkout -b dev

git checkout -b表示创建并切换(相当于 git branch dev 和 git checkout dev)

2.用git branch 查看当前分支

git branch

(git branch 命令会列出所有分支,当前分支前面会标有一个*号)

3.修改readme.txt的文件,再进行提交

vi readme.txt

git add readme.txt

git commit -m “branch test”

4.切换回到master分支

git checkout master

这是会发现readme.txt原先的修改不见了

5.再将dev分支的工作合并到master分支上

git merge dev

Updating b32ce9f..e55c3c7

Fast-forward

 readme.txt | 3 ++-

 1 file changed, 2 insertions(+), 1 deletion(-)

 

Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

当然,也不是每次合并都能Fast-forward

6.再删除dev分支。

git branch -d dev

再次查看分支

$ git branch

* master

解决冲突

1.创建分支

git checkout -b f1

修改readme.txt内容

2.在f1分支上提交

git add readme.txt

git commit -m “modify by f1”

3.切换到master分支

git checkout master

再修改readme.txt内容

再提交git add readme.txt

git commit -m “modify by master”

现在分支图:

git入门(四)Git分支相关_第5张图片

4.试图合并

git merge f1

Auto-merging readme.txtCONFLICT (content):

Merge conflict in readme.txtAutomatic merge failed;

 fix conflicts and then commit the result.

提示无法合并成功。

5.查看readme.txt内容

Git is a new version control system.

Git is free software under the GPL.

XXXX.

<<<<<<< HEAD

Creating a new branch is quick & simple.

=======

Creating a new branch is quick AND simple.

>>>>>>> f1

修改内容为:

Git is a new version control system.

Git is free software under the GPL.

XXXX.

Creating a new branch is quick & simple.

6.再次提交

git add readme.txt

git commit -m “confict solved”

7.使用git log --graph查看分支合并情况

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

 b7ce8e1 (HEAD -> master) slove conflict

|\

| * e7aec25 from f1 commit

* | 43d00f5 modify from matser

|/

* e55c3c7 branch test

* b32ce9f (origin/master) 4

* a857d16 第三次修改

* 1662df4 test stage

* ed5f4bd append GPL

* 52d72d3 add new

* cf4de49 wrote a readme file

8.删除分支

git branch -d f1

 

分支管理策略

合并分支,Git会用Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息。

如果强制禁用Fast forward模式,Git 就会在merge时生成一个新的commit。这样,从分支历史上就可以看出分支信息。

git checkout -b dev

vi readme.txt

git add readme.txt

git commit -m “add merge”

git checkout master

git merge --no-ff -m “merge wih no-ff” dev;

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

*   d92224a (HEAD -> master) merge with no-ff

|\

| * a99cec5 (dev) add merge

|/

*   b7ce8e1 slove conflict

|\

| * e7aec25 from f1 commit

* | 43d00f5 modify from matser

|/

* e55c3c7 branch test

* b32ce9f (origin/master) 4

* a857d16 第三次修改

* 1662df4 test stage

* ed5f4bd append GPL

* 52d72d3 add new

* cf4de49 wrote a readme file

git入门(四)Git分支相关_第6张图片

Bug分支

当需要及时修改一个101 的bug,但是当前dev分支的工作没做完,还未提交,这时又想创建一个分支issue-101的分支去修复这个bug

git提供了一个隐藏现场的功能,等恢复现场后继续工作

git stash

1.首先切换dev分支,git checkout dev

然后修改文件readme.txt

Git is a new version control system.

Git is free software under the GPL.

XXXX.

create a new branch is simple and interest.

new branch dev

the 5 line hsd

git bash

2.git status 查看工作区间

$ git status

On branch master

Your branch is ahead of 'origin/master' by 10 commits.

  (use "git push" to publish your local commits)

 

Changes not staged for commit:

  (use "git add ..." to update what will be committed)

  (use "git checkout -- ..." to discard changes in working directory)

 

        modified:   readme.txt

 

no changes added to commit (use "git add" and/or "git commit -a")

 

3.git stash 保存工作区间

Saved working directory and index state WIP on master: ff0d4d0 merge bug 101

 

再次使用git status查看On branch master

Your branch is ahead of 'origin/master' by 10 commits.

  (use "git push" to publish your local commits)

 

nothing to commit, working tree clean

 

4.切换到master,然后创建101分支

git checkout -b isues-101

解决bug修改readme.txt

git add readme.txt

git commit -m “fix bug 101”

 

5.合并分支git merge --no-ff -m “merge bug” issue-101

6.删除分支 git branch -d issue-101

7.切换回dev,然后恢复原先的工作区

git checkout dev  git stash pop

 

如果要丢弃一个没有被合并的分支,可以通过git branch -D 强行删除

 

多人协作

从远程仓库克隆,git会将本地的master分支和远程分支对应起来

git remote 查看远程库信息

git remote -v 查看远程库详细信息

git push origin master 推送master分支的本地提交到远程库

从远程库抓取分支

创建一个新的目录例如 g:git002

远程克隆:

git clone [email protected]:2018xsm/git001

Cloning into 'git001'...

remote: Counting objects: 66, done.

remote: Compressing objects: 100% (36/36), done.

remote: Total 66 (delta 23), reused 66 (delta 23), pack-reused 0

Receiving objects: 100% (66/66), 5.51 KiB | 513.00 KiB/s, done.

Resolving deltas: 100% (23/23), done.

查看分支:

git branch

$ git branch

* master

创建远程origin 的dev分支到本地

git checkout -b dev origin/dev

提交dev的本地修改并推送到远程库的分支

vi dev.txt

 git add env.txt

git commit -m “dev”

git push origin dev

 

再回到原先的git本地库g:git

修改dev.txt再提交

推送失败:

git pull 把最新的提交抓取下来,git pull也失败,没有指定本地dev分支与远程origin/dev分支的链接,设置dev和origin dev的链接

git branch --set-upstream-to=origin/dev dev

再次抓取git pull,修改冲突,提交并推送即可

你可能感兴趣的:(创建,合并分支,解决冲突,Git入门)