git - 如何正确使用git rebase?

标签 git version-control rebase git-merge git-rebase

我目前使用 git 的方式如下:

  1. 克隆,获取 repo
  2. 为特定问题创建主题分支
  3. 对其进行一些提交
  4. checkout 主分支
  5. 将主题分支 merge 到master
  6. 推送新的主分支

不幸的是,这有时会变得困惑。我想做的是将一些较小的提交 merge 为一个较大的提交。

此外,有时将一个新分支中的所有提交 merge 到一个提交并将其 merge 到 master 中也是一个好主意。

例子:

git branch update-docs
git checkout update-docs
git add -A .
git commit -m 'updated networking doc'
git add -A .
git commit -m 'updated manager doc'
git checkout master
git merge update-docs

如你所知,我将在主分支“更新的网络文档”和“更新的管理器文档”中进行两次提交。

如果我现在只想在 master 分支中有一个名为“更新的文档”的提交,例如包含这两个提交的更改,我必须做什么?

我认为您必须使用 git rebase 来完成此类任务。我只是不知道如何使用它。

我已经试过了:

git checkout master
git rebase update-docs

但是在没有留下任何提交的情况下 merge 了对 master 的更改,现在 repo 搞砸了。

那么有人会分享您必须使用的命令吗?

解决方案:

git checkout -b update-readme
git commit -am 'rewritten readme'
git commit -am 'added author name'
git rebase -i master

打开文本编辑器:

pick 6dbcbf1 rewritten readme
pick b815bbf added author name

现在您将其更改为:

pick 6dbcbf1 rewritten readme
squash b815bbf added author name

如果使用 vim,则使用 ":w"和 ":q"保存,它将打开另一个编辑器,您可以在其中定义新的提交名称

rewritten readme

然后 merge 仓库:

git checkout master
git merge update-readme

最佳答案

git merge update-docs之后,执行git rebase -i origin/master。这将 pop 一个 interactive rebase editor ,它允许您 squash commits否则 rearrange them .

关于git - 如何正确使用git rebase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137054/

相关文章:

git - 使用 cookiecutter 创建一个 git 版本的项目

git - 如何在执行 `git diff --color` 的同时执行不区分大小写的 git diffing?

linux - git clone 从 Linux 到 TFS git repo

visual-studio - 为什么 Visual Studio 总是重新排列 .designer 文件?

linux - 如何使用git命名空间 stash 分支

git - 如果对父分支而不是子分支进行 rebase ,子分支会发生什么情况?

iphone - XCode : Using the command line tools, 如何从文件夹创建 git 并将其导入项目

version-control - 提交消息应该用现在时还是过去时书写?

git - 在对我的 github 分支进行 rebase 后,其他人的提交位于我的 pull 请求中

git - 'git svn rebase' 和 'git rebase trunk' 之间的区别