git 提交

git rebase -i

在使用git开发的时候经常会面临一个常见的问题。多个commit 需要合并为一个完整的commit提交。

合并多个commit为一个完整的commit

我先基于develop主分支拉出一个功能分支(每个人和每个公司对分支的管理都不太一样,这里不需要太纠结。)。这里的develop是开发主分支,所有的开发功能代码都需要回归到这个develop分支中去。

git branch -a –vv

develop_fixbug_imageprint 分支是我基于远程develop分支拉出来的开发分支,我会基于这个分支来fix一些bug。我们分别看下develop、develop_fixbug_imageprint  commit log。

git checkout develop

git  log

git checkout develop_fixbug_imageprint

git log

develop_fixbug_imageprint的commit log是和devleop commit log 一模一样。我们现在切换到develop_fixbug_imageprint进行一些操作。

添加一个1.txt文件,然后git add . ,git commit –m’add 1.txt’。

再添加一个2.txt 文件,然后git add . ,git commit –m’add 2.txt’。 

现在develop_fixbug_imageprint分支里有两个commit。这两个commit都是为了fix当前这个bug而做的两个提交。现在我们要合并代码上主develop分支。总不能把这两个commit直接提交上去,这里还好只有两个commit,但是一般项目开发周期两个星期的话,你起码有十几个commit。那这样提交上去之后就很难管理和跟踪。(我以前都是这样干的,现在发现这样不好跟踪管理。)

那么我们如何完成这个合并commit尼,就需要用到git rebase 命令。

先来解释下git rebase 。你其实可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点。这个时候才能知道你当前分支于你需要比较的分支之间的差异。

比如,develop_fixbug_imageprint分支是来自develop分支,那么从test commit开始后面我们基本上都是各自发展,现在在develop_fixbug_imageprint分支上有两个commit,我们需要找一个基准,这个基准就是git需要找到哪些是你后来提交的commmit,总的有个参照。

git reabse –i develop

git rebase 立马知道develop与develop_fixbug_imageprint之间的差异。因为我们是基于develop设置rebase的。git rebase –i ,这里的”-i“是指交互模式。就是说你可以干预rebase这个事务的过程,包括设置commit message,暂停commit等等。

这里我们要求很简单就是合并之前的commit且重新设置commit message。

我们设置第二个”pick 657a291 add 2.txt” 为” s 657a291 add 2.txt”这里的s就是squash命令的简写。

跳出来了一个临时文件,最上面是两行commit message。我们修改下这个总体的commit message。

删除之前的两条message(ESC dd),设置一总的message 然后保存退出。(ESC wq)

我们查看下log。git log

是不是没有了之前的两个commit。

原理很简单:rebase需要基于一个分支来设置你当前的分支的基线,这基线就是当前分支的开始时间轴向后移动到最新的跟踪分支的最后面,这样你的当前分支就是最新的跟踪分支。这里的操作是基于文件事务处理的,所以你不用怕中间失败会影响文件的一致性。在中间的过程中你可以随时取消rebase 事务。git rebase –abort

在进入git rebase –i 交互模式,你可以做的事情就很多了,可以设置edit 编辑commit 内容,可以让他暂停commit操作。等等。

分类: git

时间: 2024-10-23 12:30:11

git 提交的相关文章

解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing

git提交代码时,出现这个错误"error: The requested URL returned error: 403 Forbidden while accessing https" 解决方法: 编辑.git文件夹下的config文件就可以. vim .git/config #改动对于的配置 #原来的url = https://github.com/elitecodegroovy/PhoenixC.git url = https://[email protected]/elitec

git提交文件到github命令

1.安装git软件 git下载地址:链接:http://pan.baidu.com/s/1o8AKGyQ 密码:r7rk 安装着三个.exe文件,安装成功后在桌面鼠标右键会看到:git clone,TortoiseGit,然后选择TortoiseGit中->setting->选择语言——>简体中文,然后确定,git就这么简单安装成功啦! 2.windows(开始)->git->gitBash3.mkdir iGit//在c:\Users\Administrator盘创建iGi

编写良好的 git 提交信息

编写一个良好的 git 提交信息 提交信息 我们作一次提交,都会提交相关的修改信息,一般这些信息当时都会仔细考虑留下应该留下的那些重要信息,比如为什么需要这次提交,提交解决什么问题等. 而且我们需要好好组织这些信息,一边以后查看,因为这些跟代码一样重要,他们是历史,就像课本一样,一旦留下错误的信息或者难以理解的信息,将会对 后来者,产生非常多的麻烦. 提交信息规范 一般来说,提交信息没有什么强制性的规范,但是希望大家遵循一些基本的规则,这些规则有利于大家正确表达提交内容,留下重要的信息,而忽略那

git提交代码至远程仓库

代码提交 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交的文件 4.提交已暂存的文件 5.同步到服务器 1.     查看目前代码的修改状态 提交代码之前,首先应该检查目前所做的修改,运行git status命令 a)        已暂存 (changes to be committed) new file //表示新建文件 modified //表示修改文件 deleted //表示删除文件 b)       已修改 (changed but n

怎样用git提交多次改动

在提交完代码后,我们发现所改动的文件还有须要完好的地方,可是我们已经upload过了可是还未合入到库上,此时要提交新的改动有两种做法: 一是等上次的改动合入到库上后,再次upload提交一次,这明显是比較繁琐的方法: 还有一种方法就是amend改动,详细步骤是: (1)改动文件,然后 git add (2)git commit --amend (3)repo sync (4)repo upload 怎样用git提交多次改动,布布扣,bubuko.com

使用git 提交笔记

使用git 提交笔记 首先打开 git.lishiming.net 注册好一个自己的账号之后 创建新的项目 new projects 填上项目名称 再打开一个这个git网页  点击setting 再找到SSH-keys 再去终端上 执行命令 [[email protected] ~]# ssh-keygenGenerating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):

git提交时支持文件名大小写的修改

在windows环境下,git提交文件时,默认对文件名大小写不敏感,若修改了文件名字的大小写,可能会导致提交时没有记录,文件名修改不成功.网上搜集了几种解决方法,现总结下: 1. 修改git config的配置 git config core.ignorecase false 经测试,发现当修改文件名字的大小写并提交后,git status里并没有删除文件的操作,只有新增操作.也就是git上的文件并没有直接替换,而是新增了一份. 2. 先删除旧文件,然后新增文件 git rm fileNames

git 提交新项目,并修改用户名以及提交邮箱  

本地有一个项目myweb,里面有.git目录. 线上新建了git仓库,gitweb. 现在要把myweb提交到线上. 直接在myweb目录下,以免冲突,提交不了.所以我用了copy的方法. 1.先把项目myweb的 .git目录,删除. 2.在/data目录下,git clone线上的仓库. 3.cp -r /data/myweb/* /data/gitweb 4.进入gitweb目录 5.git add . 6.git commit -m 'first commit' 7.git pull 8

基于git和intotify实现的git提交服务器自动更新的功能

基于inotify实现nodejs的提交后自动同步 首先在一台server上使用nodejs+express启动一个服务器,并使用supervisor 支持修改文件后 自动重启的功能 然后在这个工程上添加git仓库的引用(指向同一个服务器的另一个git仓库所对应的位置) 然后在所有人的本地开发环境也从server仓库中clone git 工程,并进行开发. 当提交代码后,使用inotify监控server 的git仓库文件变化. 如果发生变化后,通知线上运行的server 进行一次git pul

解决git提交敏感信息(回退git版本库到某一个commit)

解决git提交敏感信息(回退git版本库到某一个commit) Fri 07 June 2013 git是一个很好的版本库, 现在很多人用它, 并在github上创建项目, 相信大家都有过将敏感信息提交版本的经历, 如何删除? 好像只有删除版本库来解决, 其实我们可以通过回退版本库删除相应的commit来将提交的敏感信息去掉. 备份本地代码 首先我们将本地代码的更改备份一下, 以防丢失更改 回退本地代码的commit 备份完数据, 我们就可以先回退本地的版本库 git reset --hard