在执行git-commit之后是否可以执行git-rebase

时间:2009-05-10 18:18:41

标签: git git-rebase

我开始从NASM源文件重写一些Perl程序。我已经对自己的working copy做了一些提交,我想知道我是否应该而不是git pull,如果我应该做git rebase

我几乎已经决定我应该做git rebase,但我不知道如何重新设计我的存储库以实现这种效果,或者即使它是可能的。

Screenshot-gitk: nasm.crop

5 个答案:

答案 0 :(得分:6)

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

为什么要重新定位?为什么不拉/合并?

重新定位的目的是重写历史记录以便存储库 反映了您认为软件应该发展的方式 它实际上的方式。什么时候这很重要?当你是一个 分布式开发团队的初级成员,而您没有 提交权限 - 而你所能做的就是向一个提交补丁 看门人并希望他们被接受。为了最大化机会 接受,你想重写历史,使你的补丁 尽可能清洁和清洁。开发模型听起来很熟悉吗?

Manoj Srivastava写了fairly thoughtful analysis of rebase-vs-merge

答案 1 :(得分:2)

  1. 确保当前提交是合并提交:git log
  2. 首先我们将master重新设置为上一次提交(合并前的提交):git reset HEAD^
    • HEAD ^ 表示:“HEAD引用的提交之前的提交”
  3. 现在你可以做一个正常的变种: git rebase origin / master
  4. 下次我建议您执行git fetch,然后再执行第3步。

    我建议你创建一个当前git repo的小tarball,以防rebase出错。当你感到更自信时(通常你可以使用git修复几乎所有内容,但有时候tarball会更快),你会减少这种情况。

答案 2 :(得分:1)

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

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

up = pull --rebase origin
  1. 将您的主分支分支为“dev”或其他
  2. 在dev工作
  3. 完成添加和提交更改后
  4. git up master
  5. 切换到主人
  6. git merge dev
  7. git push
  8. 从远程仓库中提取更改时:

    1. 切换到主人
    2. git up
    3. 切换到开发
    4. git up master
    5. YMMV

答案 3 :(得分:0)

您应该可以通过更改分支来撤消上次合并:

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

之后你可以尝试变基。

答案 4 :(得分:0)

作为Dustin回复的后续内容,它应该是“git config --global branch.master.rebase true”。