赞
踩
git status #本地查看文件提交状态 git add test.txt #将工作区的代码存储到暂存区 git commit -m "commit message" test.txt (解决冲突后不能带文件名提交) #将暂存区代码存储到本地库 git rm --cache test.txt #将文件从暂存区中删除,即该文件不使用git追踪 git log #查看具体的日志信息 git log --pretty=online #查看完整的哈希码 git log --oneline #查看简写的哈希码 git reflog #查看所有的日志记录 git reset --hard/soft/mixed #重置 git diff HEAD^ test.txt #比较文件,不带文件名比较多个文件 git diff test.txt #比较工作区和暂存区文件 git branch -v #查看所有分支 git branch fix_bug #创建分支 git checkout fix_bug #切换分支 git merge fix_bug #合并分支 git remote -v #查看远程分支 git remote add origin https://,... #为远程分支添加别名 git push origin master #将master分支推送到origin远程分支 git clone https://.... #相当于为remote仓库创建了一个别名并初始化git并复制了远程源代码 git pull origin master #= git fetch origin master+git merge origin/master(在master分支上)
git merge在合并时会生成一个新的提交,是将两分支的共同祖先、两分支的最新提交记录做一个三方合并:
git rebase将两分支共同祖先之后当前分支的所有提交记录暂时提取出来,放在要变基的分支之后:
git rebase -i的基本命令(参考:https://www.jianshu.com/p/4a8f4af4e803)
注意:不要在公共分支上进行rebase操作!
git rebase -i [startpoint] [endpoint]
其中-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作。[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。
于是
git rebase -i 36224db
#或
git rebase -i HEAD~3
我们会看到
上面未被注释的部分列出的是我们本次rebase操作包含的所有提交,下面注释部分是git为我们提供的命令说明。每一个commit id 前面的pick表示指令类型,git 为我们提供了以下几个命令:
于是:
接着进入消息修改界面
编辑完保存即可完成commit的合并了:
git rebase [startpoint] [endpoint] --onto [branchName]
其中,[startpoint] [endpoint]仍然和上一个命令一样指定了一个编辑区间(前开后闭),–onto的意思是要将该指定的提交复制到哪个分支上。
所以,在找到C(90bc0045b)和E(5de0da9f2)的提交id后,我们运行以下命令:
git rebase 90bc0045b^ 5de0da9f2 --onto master
注:因为[startpoint] [endpoint]指定的是一个前开后闭的区间,为了让这个区间包含C提交,我们将区间起始点向后退了一步。
运行完成后查看当前分支的日志:
可以看到,C~E部分的提交内容已经复制到了G的后面了,分支状态可以看见当前head处理游离态:
实际上,此时所有分支的状态应该是这样:
虽然此时HEAD所指向的内容正是我们所需要的,但是master分支是没有任何变化的,git只是将C~E部分的提交内容复制一份粘贴到了master所指向的提交后面,我们需要做的就是将master所指向的提交id设置为当前HEAD所指向的提交id就可以了,即:
git checkout master
git reset --hard 0c72e64
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。