`

GIT 使用经验(3) ---分支间的操作 (续)

    博客分类:
  • GIT
 
阅读更多


Git处理分枝和合并是非常独到的。无论是创建新分枝还是分枝之间切换,都表现出一个共同的特征--快!Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系.下面就详解一下Git的合并与撤销

 


 

Git合并

 

比如现在项目提交了几次更新,在C2通过主分支创建了2个不同的分支做不同的任务




 
等任务做完需要merge到master时就可以切换到master分支下分别merge iss01和iss02分支。首先merger iss01时,会看到Fast Forward的提示,因为C3是C2的直接上游,所以Git只需把 master 分支指针直接右移。此次合并不会产生任何的冲突。如下图。


 
然后在用master合并iss02,会看到Merge made by recursive.,Git会合并C3,C4并对合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象C5如下图




 
有时候合并操作并不会如此顺利。在进行如上操作的过程中,如果iss01和iss02修改到了同一个文件的相同代码时,就会出现冲突,遇到此问题时我们可以用小乌龟自带的冲突工具解决。如下图




 

如果在分支iss01提交的时候它的直接祖先C2也进行了修改,如下图。这时候在用C6合并C4也是可以的,Git会自己裁决哪个共同祖先才是最佳合并基础,所以此特性让Git的合并操作比其他系统都要简单不少。


 

 

Git撤销

 

如果文件已经修改,但是还没有commit,我们可以用小乌龟的revert命令进行撤销。
如果文件已经commit,可以使用git reset --hard HEAD~1撤销上一次提交。~<index>代表撤销前几次的提交.
此命令回退一次commit,在回退到的commit之后的所有修改都被丢弃,所以要慎重使用。
也可以使用git reset --soft HEAD~1撤销上一次提交,它和hard的区别是,同样取消一次commit,但是所有的修改都保留。此方法用来修改commit的message非常方便。
git-revert HEAD~1      一般是按照某一次的commit完全反向的进行一次commit,他的效果和git-reset --hard HEAD~1 && git-commit -a -m 'revert commit <commitid> xxx....' 完全一样。

 

reset命令只是相当于在本地进行一次还原操作,如果想让别的分支知道你的撤销动作,请使用revert命令,它是完全反向的进行一次commit。


  • 大小: 3.5 KB
  • 大小: 3.7 KB
  • 大小: 4 KB
  • 大小: 1.4 KB
  • 大小: 3.7 KB
0
0
分享到:
评论

相关推荐

    git教程笔记(尚硅谷李海波)

    #### 4.2 分支操作 - **创建分支**:`git branch &lt;branch-name&gt;` - **切换分支**:`git checkout &lt;branch-name&gt;` - **合并分支**:`git merge &lt;branch-name&gt;` ### 五、远程仓库交互 #### 5.1 远程仓库创建与操作 -...

    mean-session2

    #MEAN 第二节##Assignment 请参阅的自述文件##交易工具 - 续GitHub吉特 - 用于 OSX 的新应用程序,可简化 Git 分支其他:嵌套、运算符以及 SASS 和 SCSS 的区别响应式设计:断点和图像CSS 伪选择器:之前CSS ...

    netflix-commons-util-0.1.1.zip

    "master"分支是Git仓库的默认分支,通常代表了项目的最新稳定版本。 基于这些信息,我们可以深入探讨以下几个相关的IT知识点: 1. **Netflix Commons**:这是一个开源的Java库集合,提供了各种实用工具,例如数据...

    NYUFrontend:纽约大学课堂作业和课堂笔记

    - 用于 OSX 的新应用程序,可简化 Git 分支 其他 :嵌套、运算符以及 SASS 和 SCSS 的区别 响应式设计:断点和图像 CSS 伪选择器:之前 CSS clearfix、精灵和动画 ##目标 了解 Web 开发的基本原理及其演变。 本次...

    eflake-ks3-demo:ks3-sdk-演示

    在"压缩包子文件的文件名称列表"中,我们看到一个名为"eflake-ks3-demo-master"的文件,这很可能是一个Git仓库的主分支克隆,包含了项目的源代码和其他资源。通常,这个文件夹下会有`src`目录,其中包含Java源代码;...

    猪哥的嵌入式linux公房菜

    - **兼容性考虑**:不同操作系统间的移植问题。 **14. 主流浏览器内核概述** - **Webkit**:被广泛应用于Safari、Chrome等浏览器。 - **Gecko**:Mozilla Firefox的核心引擎。 - **Blink**:Google和Opera联合开发...

    Node.js-AriaNg一个使aria2更易于使用的现代Web前端

    “mayswind-AriaNg-0b3d86e” 这个文件名可能是AriaNg项目的某个版本或者分支,其中“mayswind”可能是指项目作者或团队名称,“0b3d86e”看起来像是Git仓库中的一个特定提交ID,这通常用于追踪代码的修改历史。...

    windows环境下载android源码批量下载 java版本

    你需要先在Windows上安装Git,确保它已经添加到系统PATH环境变量中,这样可以在命令行中直接使用git命令。 接下来,你需要设置Android SDK和Android SDK Build Tools。这两个组件在构建和修改Android源码时必不可少...

    存储库包含 baidubce-sdk-go 的所有示例

    【压缩包子文件的文件名称列表】中的“baidubce-sdk-go-examples-master”通常表示这是从Git仓库中克隆或下载的主分支的源码,很可能包含了多个子目录和Go语言编写的示例文件。 现在,让我们深入探讨baidubce-sdk-...

    front-end-intermediate:前端中间仓库

    可选-在执行Git / Github教程克隆今天的会话:git clone https://github.com/front-end-intermediate/session-3.gitcd session-3code .npm install使用SASS进行响应式设计第二节续:同时就目前而言,我们需要多个...

    qtftp-master_followlco_qt5ftp_QT5_基于QT5的FTP类库_ftpqt5_

    3. **FTP类库开发**:在Qt5中,开发者可以使用QNetworkAccessManager和QNetworkReply等类来实现基本的FTP功能,但自定义FTP类库如qtftp可以提供更高级的功能和优化,例如并发传输、断点续传等。 4. **项目结构**:...

    dhcp-client.zip

    3. **Linux系统**:这个DHCP客户端适用于Linux操作系统,这意味着它可能是一个命令行工具,可以通过终端界面进行交互。Linux命令行传参数的方式意味着用户可以通过命令行选项来配置客户端的行为,例如设置超时时间、...

    webuploader-0.1.5-12.zip

    "fex-team"通常指的是该组件的开发团队FEX(由百度前端技术部成立的一个开源团队),而"7094e44"可能是Git仓库中的一个提交哈希值,用于标识具体的源码版本。这意味着压缩包中可能包含了源码,开发者可以通过这个...

    Android源码下载

    这里,`repo`是一个Python脚本,它封装了Git的一些常用操作,便于管理多个Git仓库。 然后,进入你希望存放源码的目录,执行以下命令来克隆源码库: ```bash mkdir android-source cd android-source repo init -u ...

    luckytuan-fast-loader-master.zip

    "master"通常指的是Git仓库中的主分支,意味着这是项目的最新稳定版本。 【描述】"luckytuan-fast-loader-master.zip" 的描述部分没有提供额外的信息,可能是由于它是文件名的一部分,重复了标题的信息。通常,描述...

    sourcetree许可证

    Sourcetree是一款由Atlassian公司开发的免费的Git和Mercurial版本控制系统客户端,它以其直观的图形界面,使得用户能够轻松管理和操作版本库。本文将深入探讨Sourcetree的许可证相关知识,包括它的功能、许可证类型...

    Linux常用命令全集

    `git [命令] [参数]`,用于跟踪文件变化、分支管理和版本回溯。 - **gitview**:图形化Git界面。虽然不是标准命令,但提供了一个更直观的Git操作方式。 - **indent**:自动调整C语言源代码的缩进。`indent [选项] ...

    开源项目-cavaliercoder-grab.zip

    在Git等版本控制系统中,"master"通常是默认分支,代表了项目的主要开发线。这个目录可能包含了源代码、测试文件、文档和其他项目资源。 4. **项目结构**:在解压后的“grab-master”目录下,通常会有一个`main.go`...

    TrebleShot局域网文件共享客户端源代码(含windows和android客户端)

    - **版本控制**:项目使用了master分支,可能涉及Git或其他版本控制系统,学习如何进行代码管理。 - **Android Studio与Visual Studio的使用**:两个开发环境的配置、调试技巧以及构建流程。 总的来说,这个开源...

Global site tag (gtag.js) - Google Analytics