`
xiaoyao8903
  • 浏览: 21555 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

git学习笔记:分支和远程仓库

 
阅读更多

1、分支

git每次提交时,都会把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。

HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长:

分支相当于开辟了一个平行空间,平行空间之间通常不会有任何交集,除非进行了合并。

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

注:被标星号的分支表明当前所在的分支。

当我们创建一个新的分支时,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上,HEAD也指向dev。从切换到dev分支开始,对工作区的修改和提交就是针对dev分支,新提交一次,dev分支的指针向前移动一步但是master分支的指针维持不变,相当于dev分支最开始在被创建的时候有了一个和默认master分支相同的文件副本。

1)如最开始master分支上,hello.txt文件的内容为:

2)切换至dev分支上:git checkout dev

3)修改hello.txt文件:

4)在当前分支上提交:

git学习笔记(二):分支和远程仓库

5)切换至master分支,再查看hello.txt的内容:

以上实验验证了不同分支的提交是不会相互影响的~

当我们在dev上的工作完成了,就可以把dev合并到master分支上,此时会直接把master分支指向dev的当前提交,HEAD在master上。

合并某分支到当前分支:git merge <name> (相当于一次commit,可以在merge的时候加上注释:git merge -m "注释" <name>)

验证:在master上合并dev分支:

然后再看此时master分支上hello.txt文件的内容:

可以看到master上的hello.txt文本的内容再合并dev分支的提交后,内容也变得和dev分支上hello.txt的内容一样了~

合并完成后,就可以删除dev分支了:

删除分支:git branch -d <name>

注:git的分支必须指向一个commit,没有任何commit就没有任何分支,提交第一个commit后git自动创建master分支。

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

注意--no-ff参数,表示禁用Fast forward:git merge --no-ff -m "注释" <name>

以上情境很常见,比如你的小组接到一个新的功能模块的开发,常常是另开一个branch。。

2、分支冲突

小组开发的合理模式常见有以下几种:

1)针对一个新的功能开发模块,另开一个新的分支如dev,大家都在这个分支上开发;

2)大家都有自己的分支,只是把功能合并的时候merge到dev分支上。

无论哪种,master分支是直接跟版本库打交道的分支,是比较稳定的分支,我们不应该在maser分支上做开发,它仅仅是用来版本发布的~ 最终开发的分支必须被merge至此。

为了模拟分支冲突情况,因为此时我只有一个用户,那就用模式2)来模拟(其实等效于小组多个开发成员修改同一个Java类啦)。

最开始dev的hello.txt内容如下:

1)假如小组成员A使用分支A,修改了hello.txt的最后一行内容如下:

2)而小组成员B使用分支B,也修改了最后一行(简单模拟冲突):

3)现在A尝试去合并B的提交,发现有冲突:

直接在A分支上查看此时hello.txt文件的内容,可以看到:

git学习笔记(二):分支和远程仓库

仔细看冲突的部分:

<<<<<<< HEAD表示当前版本下:do some out modify love and beauty

在当前版本HEAD下尝试合并:

然后add再commit:

git学习笔记(二):分支和远程仓库

会看到both modified的字样。

分支冲突时:当git无法自动合并分支时,必须先解决冲突,然后再用git log --graph --pretty=oneline --abbrev-commit查看分支合并图:

git学习笔记(二):分支和远程仓库

解决冲突并合并完毕。

3.clone远程仓库和同步本地仓库

可在github上搭建一个远程仓库,模拟公司的私服。

具体教程参照「廖雪峰大神」写的:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013752340242354807e192f02a44359908df8a5643103a000

1)克隆远程仓库,例如在F盘下,克隆github上的HelloGit仓库:

git clone git:@<ip>:<project/github账户名>/remote-repo-name.git

如:git clone git:@github.com:CommyChang/HelloGit.git

这样,在本地的F盘就会有一个和远程仓库一样的本地库了。

2)将本地仓库关联到远程服务器

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

如:git remote add origin git@github:CommyChang/learngit.git;

git push -u origin master(第一次加u以后就不用加了)

3.git pull和git push

现在本地仓库的HelloGit和远程仓库同名的HelloGit关联起来了。现在假设已经有同事B在master分支上对README.txt文件做了修改并push到远程仓库了,此时远程仓库README.txt的内容由原来的aaaaaaa变为:

git学习笔记(二):分支和远程仓库

这是,同事A也对README.txt做了修改并提交到本地库了:

用git status查看此时状态:

会提示此时和本地仓库版本一致,但是比origin/master(远程仓库默认名为origin)提前了8个commits~,并且建议push;

然后他也尝试把本地版本库的内容push到远程,发现:

git学习笔记(二):分支和远程仓库

会发现push被拒绝,并且git还建议我们先pull.

git pull表示先从远程版本库拉版本库的版本,

git学习笔记(二):分支和远程仓库

红色部分可以看出,在pull的过程(也就是把远程仓库的版本跟本地merge的过程)中,对README.txt文件发生了冲突,此时本地README.txt的内容如下:

修改之,再提交到本地仓库:

git学习笔记(二):分支和远程仓库

此时,可以看到远程仓库的文件README.txt是merge之后的:

git学习笔记(二):分支和远程仓库

同时,也多了之前没有的由A提交的文件a.txt:

git学习笔记(二):分支和远程仓库

以上模拟实验很好地再现了实际开发工作中的情况,所以再跟远程仓库的分支打交道时,一定记住先git pull再git push。。

4、标签管理

在git中,每个版本发布最好是有相应的版本编号。这时候就需要用到标签了。

1)在当前分支上,默认针对最新一次的commit打标签,同时用git tag可查看所有的标签即版本信息:

2)为某次commit打标签并查看某个标签对应的提交信息: 先找到你要打标签的提交:

git学习笔记(二):分支和远程仓库

用命令git show <tagname>可以看到说明文字;

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

接下来大概讲下标签的操作:

删除标签:git tag -d tagname

推送到远程:git push origin tagname

一次性推送到远程:git push origin --tags

删除远程标签:先删除本地标签git tag -d tagname,再删除远程git push origin :refs/tags/tagname

分享到:
评论

相关推荐

    git学习笔记.zip|git学习笔记.zip

    在“git学习笔记”中,我们通常会涵盖以下几个核心知识点: 1. **Git安装与配置**:首先,我们需要了解如何在不同的操作系统(如Windows、MacOS或Linux)上安装Git,并设置用户信息,包括用户名和邮箱,这些信息会...

    Git学习笔记.pdf

    常用的远程仓库操作包括创建SSHKey、添加远程库、远程克隆、推送分支和抓取分支等。其中,SSHKey用于安全地访问远程仓库。 分支管理是Git中非常重要的功能,允许开发者在不同的分支上工作,而不干扰主分支。Git中的...

    git学习常用命令总结

    "git学习常用命令总结" Git是当前最流行的版本控制系统之一,对于开发者来说,掌握 Git 的基本命令是必不可少的。本文将对 Git 的常用命令进行总结,帮助开发者快速掌握 Git 的使用。 初始化操作 在使用 Git ...

    git学习笔记,一看就会

    ### Git学习笔记——入门篇 #### 一、Git简介与安装 **Git**是一种分布式版本控制系统,用于跟踪计算机文件的变化,并协调多个用户之间的共享工作。它最初由Linus Torvalds于2005年创建,目的是为了更高效地管理...

    Git学习笔记

    Git是分布式版本控制系统,它以其高效...Git学习笔记详细记录了以上各个知识点的实践操作和应用场景,帮助开发者熟练掌握Git的使用,提高团队协作效率。通过不断练习和理解,可以更好地应对复杂的代码管理和协同工作。

    git学习笔记

    ### Git学习笔记 #### Git的历史背景与发展 - **Git的诞生**:Git的诞生源于Linux内核项目的实际需求。在2002年至2005年间,该项目使用了一款名为BitKeeper的分布式版本控制系统来管理其源代码。然而,随着...

    git学习笔记.docx

    `git push` 命令用于将本地分支内容推送到 GitHub,如 `git push https://github.com/TLZS/11.git master` 推送 `master` 分支到远程仓库。从 GitHub 获取代码通常使用 `git pull`,例如 `git pull ...

    Git-Note(Git笔记)

    - 初始化仓库:`git init` 或 `git clone`(克隆远程仓库)。 - 添加文件:`git add &lt;file&gt;` 或 `git add .`(添加所有更改)。 - 提交更改:`git commit -m "commit message"`。 - 查看状态:`git status`。 -...

    git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记

    - **`git push -u origin master`**: 将本地仓库的`master`分支推送到远程仓库。首次推送需要使用`-u`选项以设置默认的跟踪关系。 - **`git clone &lt;url&gt;`**: 从远程仓库克隆代码到本地。 ### 分支管理 #### 基础...

    git实战笔记.pdf

    - Remote(远程仓库):在远程服务器上的 Git 仓库,用于协作和备份。 3. Bash 基本命令: Bash 是 Git 常用的命令行环境,基本命令包括 `cd`(切换目录)、`ls`(列出目录内容)、`mkdir`(创建目录)、`touch`...

    Git的学习笔记/记录

    这份"Git的学习笔记/记录"涵盖了Git的基础知识以及高级用法,旨在帮助读者深入理解Git的工作原理和实践技巧。 一、Git的基本概念 1. 版本控制:Git的主要目标是管理项目在开发过程中的不同版本,以便于回溯、比较和...

    Git整理笔记

    23. **查看远程仓库信息**: `git remote` 和 `git remote -v` 命令分别用于查看远程仓库的名称和详细信息。 24. **推送分支到远程仓库**: `git push origin &lt;branch&gt;` 命令用于将本地分支推送到远程仓库的对应分支...

    git学习笔记,入门指南以及常用git指令

    这篇笔记主要涵盖了Git的基本操作,包括创建或克隆版本库、管理本地更改、查看提交历史记录、分支管理和标签使用等核心概念。 **1. 创建或克隆版本库** 创建本地版本库: ```bash $ git init ``` 克隆远程版本库:...

    git-notes:Git和GitHub笔记

    Git的核心概念包括仓库(Repository)、提交(Commit)、分支(Branch)、合并(Merge)和远程仓库(Remote Repository)。仓库是存储项目所有版本的地方,提交则是每次对代码更改的记录。分支允许在不影响主分支的...

    GIT学习笔记.doc

    在Git中,你可以通过`git fetch`获取远程仓库的更新,`git pull`将远程更新合并到本地,`git push`则将本地更改推送到远程仓库。此外,`git reset`和`git rebase`等高级命令用于处理更复杂的版本历史操作。 了解Git...

Global site tag (gtag.js) - Google Analytics