git by example
记一次回滚操作
- 路人甲让我修改一个bug,我在develop下修改了
- 路人甲让我push到releae/sdk0.7分支上
- 我本地操作切换到release分支并合并develop上的修改:
- git checkout release/sdk0.7
- git merge develop
- git pull
- git push origin release/sdk0.7
- 路人甲pull下来看了下之后,发现问题:
- 只要我修改的那个bug
- 不要develop上的其他新修改(develop上有多人的新提交)
- 我本地分支试验下回滚操作:
- git checkout -b rfake 分支一个rfake出来做试验
- 查看我那个修改是develop上的倒2个commit,
- git cherry-pick develop~1 把develop的倒2个commit 通过cherry pick合并到rfake这个分支
- 擦亮眼睛:cherrypick可以取到任何一个分支的任何一个commit,配合reset你想干嘛就干嘛
- git log查看下,正确,
- 回滚:
- git checkout release/sdk0.7
- git reset --hard commithash 到第2个步骤之前的commit(commithash只要指定commit的前面几位hash数字即可)
- 可以通过git log查看某个commit的hash值
- git push origin release/sdk0.7 -f 强制push到仓库
- 重复第5个步骤的事情
- git push origin release/sdk0.7
- 路人甲需要做:
- git reset --hard commithash 到第2个步骤时release分支的最新commit
- git pull 重新拉取
- 事实上,如果一开始就正确操作就可以避免回滚:
- 一开始就在relsease分支上修改,或者从release分支出来一个新分支来修改
- 修改完毕,提交到release分支
- 把release分支的修改merge到develop上,因为develop总是比release新。
- 这个操作覆盖了git的大部分操作:
- 如何切换到分支开发,如何建立新分支做实验
- 如何合并其他分支上的修改到当前分支
- 如何提取某个分支的某个commit并合并到当前分支
- 如何重置
- 如何强推
- 怎样正确的在发布分支上改bug
使用GitHub实施团队项目开发
理解git的原理
- 最佳实践、本文略晦涩、慎入:Commit Often, Perfect Later, Publish Once: Git Best Practices
- 图解Github的PullRequest开发方式:Understanding the GitHub Flow
- 一种成功的git分支策略:A successful Git branching model
- 如何写好git的提交日志:How to Write a Git Commit Message
- 抱持提交历史的干净、整洁:Keeping Commit Histories Clean
- 最好的git合并工具:What's the best visual merge tool for Git?
- git的最佳操作之一是用命令行,但是合并冲突的时候,一个跨平台的Diff工具会带来极大便利:visual diff
git by example的更多相关文章
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git与Repo入门
版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...
- 史上最详细git教程
题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...
- [版本控制之道] Git 常用的命令总结(欢迎收藏备用)
坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...
- 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解
工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...
- git 命令
切换仓库地址: git remote set-url origin xxx.git切换分支:git checkout name撤销修改:git checkout -- file删除文件:git rm ...
- git亲测命令
一.Git新建本地分支与远程分支关联问题 git checkout -b branch_name origin/branch_name 或者 git branch --set-upstream bra ...
随机推荐
- request,session,application
JSP 的3个内置对象request,session,application,其实都有一个作用域,这些对象内部有一个Map成员用于存放数据,比如session对象的setAttribute(key,v ...
- First glance in Go
Because I forgot to install the Chinese input in this OS, I have to use English input. The first pro ...
- [20140117]疑似checkpoint堵塞数据库连接
注:这个说法是不成立的,问题已经解决,但是无法正确的定位到具体什么原因:[20140702]奇怪的应用程序超时 背景: 开发通过应用程序的日志发现间歇性的出现,数据库连接超时 原因: 只能大概猜测,没 ...
- Java的String.valueOf 转换 与、空串+类型变量转换与封装类(Integer)的toString方式转换比较。
1.空串+类型变量方式转换 int i=20; String s=""+i; 这种方式实际上经过了两个步骤,首先进行了i.ToString()把 i 转换为 字符串,然后再进行加法 ...
- RedHat Linux 9.0的安装+入门指南(图文并茂)
一,准备工作1,购买或下载Redhat9的安装光盘(3张盘)或镜像文件2,在硬盘中至少留2个分区给安装系统用,挂载点所用分区推荐4G以上,交换分区不用太大在250M左右比较适合,文件系统格式不论,反正 ...
- lsll 加载段限长指令
static inline unsigned long get_limit(unsigned long segment) { unsigned long __limit; __asm__(&quo ...
- Microsoft.Bcl.Build 1.0.10 稳定版发布
Microsoft.Bcl.Build 1.0.10 稳定版发布 解决了之前 1.0.8 在未下载相应的Nuget Package 的情况下项目无法加载的情况 但由于 Microsoft.Net.Ht ...
- php 连续留存与留存人数计算
for($i = 0;$i <= $interval;$i++) { $res = $model->turnround($today,$tomorrow,$flag); $temp = a ...
- CTO和技术副总裁应该如何分工?谁才是技术领导者?
谁是初创公司的技术领导者,是CTO还是技术副总裁?任何在创业公司工作的人都知道,我们不应该去问这个问题.因为这两个是非常不同的角色,角色本身会随着创业公司的发展而变化,两者对于业务规模都很重要. 简单 ...
- C++浅析——继承类中构造和析构顺序
先看测试代码,CTEST 继承自CBase,并包含一个CMember成员对象: static int nIndex = 1; class CMember { public: CMember() { p ...