The git rebase Command
来源:互联网 发布:魔法王座最新升阶数据 编辑:程序博客网 时间:2024/06/06 01:50
Rebasing is the process of moving a branch to a new base commit. The general process can be visualized as the following:
From a content perspective, rebasing really is just moving a branch from one commit to another. But internally, Git accomplishes this by creating new commits and applying them to the specified base—it’s literally rewriting your project history. It’s very important to understand that, even though the branch looks the same, it’s composed of entirely new commits.
Usage
git rebase <base>
Rebase the current branch onto <base>, which can be any kind of commit reference (an ID, a branch name, a tag, or a relative reference to HEAD).
Discussion
The primary reason for rebasing is to maintain a linear project history. For example, consider a situation where the master branch has progressed since you started working on a feature:
You have two options for integrating your feature into the master branch: merging directly or rebasing and then merging. The former option results in a 3-way merge and a merge commit, while the latter results in a fast-forward merge and a perfectly linear history. The following diagram demonstrates how rebasing onto master facilitates a fast-forward merge.
//看懂这三张图的关键是黄色master的位置变化
Rebasing is a common way to integrate upstream changes into your local repository. Pulling in upstream changes with git merge results in a superfluous merge commit every time you want to see how the project has progressed. On the other hand, rebasing is like saying, “I want to base my changes on what everybody has already done.”
Don’t Rebase Public History
As we’ve discussed with git commit --amend and git reset, you should never rebase commits that have been pushed to a public repository. The rebase would replace the old commits with new ones, and it would look like that part of your project history abruptly vanished.
Examples
The example below combines git rebase with git merge to maintain a linear project history. This is a quick and easy way to ensure that your merges will be fast-forwarded.
# Start a new feature
git checkout -b new-feature master
# Edit files
git commit -a -m "Start developing a feature"
In the middle of our feature, we realize there’s a security hole in our project
# Create a hotfix branch based off of master
git checkout -b hotfix master
# Edit files
git commit -a -m "Fix security hole"
# Merge back into master
git checkout master
git merge hotfix
git branch -d hotfix
After merging the hotfix into master, we have a forked project history. Instead of a plain git merge, we’ll integrate the feature branch with a rebase to maintain a linear history: //关键:将master上的hotfix合并到feature分支上
git checkout new-feature
git rebase master
This moves new-feature to the tip of master, which lets us do a standard fast-forward merge from master: //所以这一步操作可以无冲突地合并feature到master上
git checkout master
git merge new-feature
- The git rebase Command
- git- rebase
- git rebase
- git rebase
- git rebase
- git rebase
- git rebase
- git rebase
- git rebase
- git rebase
- Git rebase
- Git Rebase
- git rebase
- git rebase
- git rebase
- git-rebase
- git rebase
- git rebase
- 蓝桥杯2n皇后问题(简单递归回溯)
- Hadoop RPC概述
- 黑马程序员-OC语言基础学习(四)
- [Git]09 如何为命令起外号
- vim全局替换命令
- The git rebase Command
- 第三周作业--实现随机点名的签到程序
- jvm垃圾回收
- [Git]10 如何提交更新时的冲突
- 记录自己的每一天 No.1
- Ubuntu13.10 安装 OpenOffice
- 批处理学习 二
- 注册表操作详解
- 暗时间