可以使用git-rebase而不是git-pull吗?

7

我开始重写一些来自NASM源文件的Perl程序。我已经对我的工作副本进行了几次提交,我想知道是否应该使用git rebase而不是git pull

我已经基本确定我应该使用git rebase,但我不知道如何重新构建我的存储库以实现这种效果,甚至不知道是否可能。

Screenshot-gitk: nasm.crop

5个回答

6

这是可能的,Git Magic 教程将解释如何做到这一点。但是如果其他人看到了你的分支,那么就不安全了。即使没有其他人看到你的分支,我也建议你重新考虑。

为什么要进行变基?为什么不只是拉取/合并?

变基的目的是重写历史,使您的存储库反映出您认为软件应该发展的方式,而不是实际发展的方式。什么时候这很重要?当您是分布式开发团队的初级成员,并且您没有提交权限-相反,您只能向门卫提交补丁,并希望它们被接受。为了最大化接受的机会,您想重写历史,使您的补丁尽可能清晰明了。这种开发模型听起来熟悉吗?

Manoj Srivastava 写了一篇关于变基与合并的相当深入的分析


在问题描述的情况下,将本地更改变基到远程分支应该是安全的。 - mkrieger1

2

我过去使用以下方法取得了成功:

对于这种方法,我已添加了以下别名:

up = pull --rebase origin
  1. 将你的主分支(branch)分支(branch)分支(branch)命名为“ dev”或其他任何名称。
  2. 在dev中工作
  3. 完成添加和提交更改后
  4. git up master
  5. 切换到master
  6. git merge dev
  7. git push

当从远程repo拉取更改时:

  1. 切换到master
  2. git up
  3. 切换到dev
  4. git up master

YMMV


你的别名似乎是一种不太标准的方式来执行 git config --global branch.master.rebasegit config --global branch.autosetuprebase always(如果你想针对特定分支这样做,你总是可以获取和合并)。 - Dustin

2
  1. 确保当前提交是合并提交:git log
  2. 首先将主分支重置为上一个提交(即合并之前的提交):git reset HEAD^
    • HEAD^ 表示“HEAD 引用的提交之前的提交”
  3. 现在可以进行普通的变基操作:git rebase origin/master

下次建议先执行 git fetch,然后再进行第 3 步的变基操作。

我建议创建当前 git 仓库的小 tar 包备份,以防万一变基操作出错。当您感到更加自信时,这种操作会越来越少(通常可以使用 git 解决几乎所有问题,但有时候 tar 包会更快速)。


0

您应该能够通过以下方式更改分支来撤消上次的合并:

git branch your-changes <reflog of "Reworked test files...">
git branch -f master remotes/origin/master

接下来你可以尝试变基。


-1
作为 Dustin 回复的跟进,正确的命令应该是 "git config --global branch.master.rebase true"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接