开发过程中,本地分支和远程跟踪分支发生了diverge
1 git基本概念梳理
1.1 git的工作目录、暂存区和HEAD指向的版本库以及branch的概念
一个branch就是整个产品的一套代码,而工作目录中就是存放的本branch最新的代码,HEAD指向的branch是最近一次提交后的整个产品的一套代码。从branch的角度就能够很好的把工作目录和HEAD指向的版本库联系起来了。工作目录中的一套代码存放在外存的一个位置,版本库的代码存放在另外一个位置。暂存区中只是存放git add的几个文件而已。
另外,版本库和远程的版本库是一样的,但是,本地的版本库如果没有更新的话,一些分支的会落后远程库一些commit。
要想本地的版本库和远程的版本库的代码一致,那么就git fetch <remote>就行,不用指定主机名,因为clone本地库的时候,就已经把本地和远程主机关联起来了。git已经记住了。
2 各个命令不要单独用,而是加上branch已经主机名,这样的话,不会记混
也就是说,记住其操作的对象。
2.1 命令操作的对象
2.1.1 远程主机
只在git clone时会用到。
2.1.2 远程主机上的仓库和远程主机上的仓库中的分支
使用git branch -r就可以查看到远程主机上的仓库和分支,返回的是一个<remote>/<branch>列表,前面就是远程仓库名,后面是各个branch名。
所有,git操作的基本单位是branch,但是为了把远程和本地的branch区分开,就用了一个远程仓库名。
3 不要用git pull,用git fetch
git fetch <remote>将远程的所有分支的代码拉取到本地,它不会merge,本地仓库就和远程仓库同步了,然后就可以进行branch的merge了。
4 本地的分支和远程跟踪分支发生了分歧的解决办法,最简单的方式
第一,保存好本地修改的未提交的代码
第二,同步本地版本库到远程版本库
git fetch <remote>
第三,重新定义本分支的commit链表
git reset <remote>/<branch>
这样的话,HEAD指针就指向了远程分支的最新一次提交,那么该branch就和远程的branch一样了。
但是,现在工作区和缓冲区还没有变化,
工作区是当前branch的最新代码,如果加了--hard的话,那么,工作区的代码会被更新到该branch最新的状态的所有代码。
而缓冲区就会被清掉,因为,工作区和当前分支的版本库是一样的,那么它就什么也没有了。
如果使用--soft,当前工作区和缓冲区都不变。那么当前工作区的代码就会和当前分支版本库中的代码区别比较大了,因为很可能很多人已经向远程分支提交了commits。这个时候怎么办呢?因为很多当前分支库的代码工作区都没有,难道这次提交之后,工作区没有的这些代码就会被删除吗?是的,如果很多提交的话,都会没有了。
--soft的使用时机?适合于变更集合比较小,也就是说,本地进行了一次提交,但是还没有push到远程分支,这个时候,可以git reset --soft HEAD^,这样的话,就会把本次提交丢弃,但是工作目录中还存在本地修改,然后再提交就可以了。也就是说,git的这些命令都是有自己的适用范围的。
因此,如果远程分支已经有别人提交了,那么用git reset --hard <remote>/<branch>,那么本地分支和远程分支又同步了,然后工作目录和缓存目录也都干净了。
第四,再把修改的文件加进来
改好后,重新提交即可。
5 怎样避免发生diverge
在多个人同时在一个分支上开发时,很容易发生diverge的情况。为什么会发生diverge呢?主要的原因是因为没有同步服务器端最新的代码。服务器端已经有新的commit了,但是,自己并没有同步,就commit,这样的话,自己和远程分支就会diverge。
那么怎样避免呢?做到两点就可以避免,第一,commit前必须要先同步到远程最新的代码,同步的时候就算conflict也没有关系,只要解决冲突就可以了。第二,commit之后尽快push到服务器端。这样可以尽量减少diverge的可能性。当不可避免的发生了diverge这么办呢?4是一种很保守的做法。更好的办法
第一种思路,git fetch origin/master然后git merge origin/master
第二种思路,git fetch origin/master然后git rebase
开发过程中,本地分支和远程跟踪分支发生了diverge的更多相关文章
- 11.Git分支-远程跟踪分支的概念、多个远程仓库的使用
1.远程跟踪分支的概念 远程引用是对远程仓库的引用,包括分支.标签等等. 1.可以通过 git ls-remote <remote> 来获得远程引用的完整列表 2.git remote ...
- git 跟踪分支 远程跟踪分支 学习笔记
远程跟踪分支相当于一个只读仓库指针,从服务器上获取数据,不可以被本地直接修改. 跟踪分支相当于一个本地指针 用于项目更新和迭代. 1跟踪分支 (tracking branch) 逻辑示意图 ...
- Git本地提交到远程指定分支
git push origin master:ziranmeng2.(本地分支:远程分支)
- git 本地分支与远程仓库分支关联
当我们从远程仓库项目克隆到本地后,会自动创建本地master分支,并且与远程仓库主分支关联.如果我们需要在本地创建一个分支并且与远程仓库的origin/xxx分支关联,则可以通过以下命令实现 git ...
- 20.远程分支&跟踪分支
远程分支 远程引用是对远程仓库的引用(指针),包括分支.标签等等. 你可以通过 git ls-remote (remote) 来显式地获得远程引用的完整列表,或者通过 git remote show ...
- 工作中常见的Git本地分支与远程分支同步场景
Git 是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. 一直以来本人使用 Git 处理分支都是现用现查,一是因为怕出错,二还是因为懒,作为一名四年开发经验的前端 ...
- 12.Git分支-推送(push)、跟踪分支、拉取(pull)、删除远程分支
1.推送 本地的分支并不会自动与远程仓库同步,你可以显示的向远程仓库推送你的分支.例如你在本地创建了一个dev分支,你想其他的人和你一样在dev之下进行工作,可以使用 git push <rem ...
- git创建本地分支以及推送本地分之至远程分支
Git分支策略 实际开发中,应当按照以下几个基本原则进行管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能再上边干活. 那在哪干活呢?干活都在dev分支上,也就是说,de ...
- git远程分支创建,本地分支关联远程分支,第一次发布、更新分支
git远程分支创建,本地分支关联远程分支,第一次发布.更新分支 github托管服务器地址为https://github.com git提交更新代码示意图: 本地与远程进行免密码配置(本地与远程关联) ...
随机推荐
- 利用Django徒手写个静态页面生成工具
每个Geek对折腾自己的博客都有着一份执念 背景介绍 曾经多次在不同的平台写博客,但全部都以失败而告终.去年七月选择微信公众号做为平台开始了又一次的技术分享,庆幸一直坚持到现在,但随着文章发表的越来越 ...
- JUC线程池深入刨析
JDK默认提供了四种线程池:SingleThreadExecutor.FiexdThreadPool.CachedThreadPool.ScheduledThreadPoolExecutor. 本文会 ...
- 【spring cloud】@EnableTransactionManagement注解的意义
@EnableTransactionManagement注解的意义
- htop简介
htop可谓top的升级版,top不可以鼠标操作,但是htop可以使用鼠标操作 启动方式:命令行下输入htop直接启动,启动后的界面如图所示 操作:可以使用上下左右方向键进行移动查看.可以使用鼠标点击 ...
- ylb: 触发器(Trigger)之Instead Of触发器 [注:没内容]
ylbtech-SQL Server:SQL Server-触发器(Trigger)之Instead Of触发器 触发器(Trigger)之Instead Of触发器 [注:没内容]. ylb: 触发 ...
- 【LeetCode-面试算法经典-Java实现】【139-Word Break(单词拆分)】
[139-Word Break(单词拆分)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a string s and a dictionary of w ...
- WIN SERVER8更改MYSQL的datadir后,数据库启动不起来
曾经一直都没注意的问题.这次就记录下来吧.假设有相同问题的也当做一个提示 WIN SERVER8更改MYSQL的datadir后,数据库启动不起来,详细原因有二. 首先.先来看一下怎样更改 datad ...
- VC6 在使用VC助手(Visual AssistX)在Win7下不能使用↑↓←→及回车键选择的解决的方法
VC6使用Visual AssistX版本号的问题,换一个版本号.如"Visual Assist X 10.8.2029"就可以解决. http://pan.baidu.com/w ...
- Java Transaction Management
Just a few weeks ago, I had a discussion with one of my colleagues about how to manage the transacti ...
- HDU5294——Tricks Device(最短路 + 最大流)
第一次做最大流的题目- 这题就是堆模板 #include <iostream> #include <algorithm> #include <cmath> #inc ...