Git 分为哪几个区:
https://blog.csdn.net/qq_36672905/article/details/82776283


Git的区域分为 工作区、暂存区、本地仓库区

工作区(work directory):一般就是我们项目的根目录。

本地仓库(repository):我们在为项目添加本地库之后,会在工作区生成一个如下图所示的隐藏目录“.git”,.git目录即为当前工作区的本地版本库

暂存区(stage):版本库中设立一个暂存区(Stage or Index),作为用来直接跟工作区的文件进行交互,工作区文件的提交或者回滚首选都是通过暂存区,而版本库中除了暂存区之外,文件的提交的最终存储位置是分支(Branch),在创建版本库的时候默认都会有一个主分支(Master)

1.首先 看目前位于哪个分支上 (前面带*号的为当前分支)

git branch

2.创建本地分支 (若没有dev分支会创建并切换到dev2上)

git checkout -b dev

3.在分支dev上 进行改动,改动完成 (commit之后的commitId需要保存)

git add .
git commit -m "提交信息"

4.回到master分支

git checkout master

5.更新代码

git pull origin master

7.将dev的更新合并过来(commitId是dev在commit的时候的)

git cherry-pick commitId

当cherry-pick时,没有成功自动提交,这说明存在冲突


$ git cherry-pick 2555c6e
error: could not apply 2555c6e... [Description]:branch2 commit 2
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

8.有冲突手动解决然后 add,可以不commit,直接调用 add和continue 之后继续(等于再次commit)

git add .
git cherry-pick --continue

https://blog.csdn.net/fightfightfight/article/details/81039050

9.然后可以查看当前提交的信息(查看n条就写-n)

git log -3

最后就可以push了

git push -u origin master
或者
git push origin HEAD:refs/for/master

问题一
此时已经push完成,但是别review代码时觉得你提交的commit 信息不合适,需要修改 ,amend之后要再次push ,这样就提交了,但是此次更改的是最近一次commit的信息

git commit --amend
git push origin HEAD:refs/for/master

问题二
现实是可能有好几个分支 cherry-pick ,这时候的操作

1、比如时间点A拉取了最新的代码 ,然后创建一个本地分支dev,做了改动 然后git add .git commit -m " dev commit "

2.然后回到master 分支 git checkout master,这是后发现远程代码更新了,然后就要git pull origin master 然后呢,这时候你有另一个功能要改,此时就要再创建一个dev1分支,然后在dev1上改动,改完之后 git add .git commit就可以回到master 上
3.再次回到master 分支,然后就可以 将dev 和dev1 的改动合并过来了

git cherry-pick 57f6eac(dev 的commitId)

如果有冲突就解决冲突,然后dev1 同理

    git add .git cherry-pick --continue

4.都cherry-pick完成之后,git log -3看最上面的两次commit,因为每次的cherry-pick都相当于一次commit ,从log的信息可以看出,master分支上的这两次commit的信息 (commitId,和注释)就是dev和dev1分支上的commitId和注释。

5.如果想提交的时候不想有两次的commit记录可以把这两次的commit合并
(commitId是你要合并的两个commit后所形成的一个commitId需要在哪一个的commitId之后,就是要定位在哪个位置

 git rebase -i commitId

https://blog.csdn.net/u013276277/article/details/82470177
然后点击i进入到vi 的编辑模式,然后要合并几条commit 就在第一条的commitId前写pick 以后的几条前都写s(squash的简写),这样这几条就会被合并了,保存的步骤 键盘 insert esc 然后输入冒号 :wq 这是退出保存

pick 的意思是要会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit


保存之后,还是会进入一个可以vi 的编辑界面合并成新的commit的备注信息,这样就完成了。

=============================================================

另外一个问题,在上面的步骤2 比如,从dev回到master分支之后,pull下来更新的代码,然后创建dev1,打算去完成某一功能,但是需要dev中已经添加的一些资源,所以 我就把dev 的commit cherry-pick到了dev1上,然后继续完成功能,完成之后add commit

然后回到了master分支,打算合并dev1分支的内容,当时想的是dev1已经合并了dev 的内容所以只需要合并dev1的commit就行了
这样其实也没错,但是在master上cherry-pick 完dev1之后发现dev的内容并没有合并过来?
为什么呢,因为我只是cherry-pick的dev1的commit ,并没有将dev1 cherry-pick dev的那次commit(签名说过cherry-pick也相当于一次commit) 拿过来,所以就是这样的 在dev1上相当于有两次commit,但是我拿了最后那一次的commitId,所以是需要再cherry-pick 分支dev的commitId ,这样代码才全部合并完成

如图所示,c1才是对应的dev分支的内容,c2是dev1分支的内容,虽然在dev1上有dev代码的内容,但是在将dev1合并到master上去的时候,Git不是根据内容来合并的,是根据内容变化的节点来的,所以合并要合并两个节点的内容

参考文章:https://blog.csdn.net/u013276277/article/details/82470177
https://blog.csdn.net/fightfightfight/article/details/81039050

===========================================================

如果提交错了
版本回退 回退到哪个版本

git reset --hard  commitId

有两种方法 :reset 和revert
https://blog.csdn.net/yxlshk/article/details/79944535

Git 分支合并代码相关推荐

  1. c++两个vector合并_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

  2. 这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

  3. git 分支合并主干、主干合并分支

    git 分支合并主干.主干合并分支   复杂的项目都会有主干和分支,每过一段时间后便会将分支代码合并到主干或者将主干代码合并到分支,以下是主干分支合并时的步骤和对应的git命令. branch为分支名 ...

  4. git分支合并、撤销;git修改已push的commit信息; git 撤销操作;

    git分支合并 1.分支代码提交 2.git branch 查询本地分支 3.git checkout 分支名1 切换分支到需要合并的分支上 4.git merge 分支名2  //选择要合并到 分支 ...

  5. git 主干修改合并到分支_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师"合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的是 ...

  6. Git分支合并请求冲突处理规则

    1. Git分支合并请求冲突处理规则 1.1. 问题描述 提交分支合并请求时,出现冲突,提示为 此合并请求有变更与目标分支冲突. 示例如图: 1.2. 原因 合并的目标分支,已经有了更改,比如其他分支 ...

  7. Git分支合并(merge)时忽略某个文件或者目录

    Git分支合并(merge)时忽略某个文件或者目录 前言 ​ 最近使用VUE开发构建了项目,因为打包发布引发了一场小意外,就是不同分支的dist文件夹合并时发生冲突,而且有时先打包后合并的分支,导致两 ...

  8. git分支合并之Fast-forword(快进方式)原理剖析

    git分支合并之Fast-forword(快进方式)原理剖析 git与svn创建分支差别 svn创建一个分支是将文件全部拷贝一份,而git则为其新的分支创建一个指针,其性能及效率相比与svn更加高效. ...

  9. git分支合并指定代码_git的几种实用操作(合并代码与暂存复原代码)

    总述 git工具也用了很久,自己也写了几篇使用教程,今天继续给大家分享一些我工作中使用过的git操作. 1.git合并远程仓库的代码 2.git stash保存当前的修改 这两种情况大家应该都使用比较 ...

最新文章

  1. MFC按钮添加提示文字
  2. SQLServer错误:过程 sp_addextendedproperty,第 xxx 行对象无效。'dbo.xxx.xxx' 不允许有扩展属性,或对象不存在。...
  3. 为Drupal7.22添加富编辑器 on Ubuntu 12.04
  4. 安卓手机绘制uml图_Android Studio中绘制simpleUML类图详细说明及使用
  5. 没想到啊!3980元的Web前端视频今日免费送
  6. html根据菜单角色配置菜单代码,CSS设置列表样式和创建导航菜单实现代码
  7. android 开发 目标绑定,Hippy: Hippy 是一个新生的跨端开发框架,目标是使开发者可以只写一套代码就直接运行于三个平台(iOS、Android 和 Web)...
  8. C++接收字符串数组_C语言处理字符串的7个函数
  9. ndr4108贴片晶振是多少频率_流处理器、核心频率、 位宽……这些显卡参数你知道吗?—— 电脑硬件科普篇(八)...
  10. python for循环练习
  11. WCF探索之旅(五)——WCF与WebService的异同
  12. C# datagridview绑定Liststring显示的是数据长度
  13. SQL 2008完全卸载
  14. 耳机频谱曲线测试软件,通过耳机频响曲线来调EQ,免费的音质提升你要吗?
  15. 基于EEG的睡眠分期算法记录3-使用决策树多类支持向量机的自动睡眠阶段分类
  16. 【毕业设计】基于树莓派的指纹识别与RFID考勤系统 - 嵌入式 单片机 物联网
  17. C# ActiveX 网页打包验证自动升级
  18. CentOs 7源码安装 Python3
  19. オルレイア / 雷斧
  20. 关于 Kubernetes中Service的一些笔记

热门文章

  1. 小米android7.1机型,心目中最牛逼的小米旗舰机:支持安卓7.1+骁龙801
  2. 明星直播带货的平台都有哪些功能?
  3. js数组合并、去重、降维(ES6:扩展运算符、Set)
  4. TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)
  5. GRE vpn 的配置
  6. 大数据毕业设计 二手房数据爬取与分析可视化系统 -python
  7. es自定义拼音分词器处理中文拼音排序问题
  8. RTMP转WEBRTC实现音视频推流及网页无插件播放
  9. 嵌入式Qt程序启动参数-qws 不需要X11桌面系统
  10. Siri究竟牛在哪里?深入解析苹果的人工智能助理