Git - 你能用rebase做一些你不能做的事情吗?

时间:2015-10-27 16:30:18

标签: git git-rebase

每当我尝试rebase时,我就陷入了无法解决的无限冲突循环。在解决x冲突之前,会出现y冲突,然后x再次冲突,依此类推。

关键是(显然)merge,甚至cherry-pick,提供了与rebase相同的功能,不是吗?如果不是,那rebase的用处是什么?

2 个答案:

答案 0 :(得分:4)

rebase重写历史记录。 方式 超过mergecherry-pick - 一个非常先进的工具,需要练习(并且可能很危险,因为它会重写历史记录。 ..小心git push -f)。当rebasemerge类似地使用时,过程就会截然不同。

git fetch origin && git merge origin/master

  • 从原始文件下载更改
  • 在本地分支上合并更改
  • 解决冲突并提交

git fetch origin && git rebase origin/master

  • 从原始文件下载更改
  • 将本地分支重置为历史记录中的公共点(本地/远程目录库共享的提交)
  • 快进原点
  • 逐个在新提交的基础上提交您的提交
  • 解决冲突并为每次本地更改提交

rebase在这种情况下的一大优势是,您只是更新本地仓库并在顶部应用您的提交,并且不会有任何“粗略”合并提交说“嘿,我刚刚合并这个东西。“缺点是,如果你有大量的提交修改相同的文件,你将不得不一遍又一遍地解决冲突,因为没有“粗略”的合并提交。

但同样,rebase是一个非常先进的工具,用于重写历史记录。您可以修改以前的提交标题,删除过去的提交,将许多提交压缩在一起等等。Read up on it!

答案 1 :(得分:2)

我只在一个案例中使用for (i in 1:(dim(dummydata)[2]-1)){ title<-paste0("graph_", i, ".pdf") pdf(title) print(ggplot(data = dummydata, aes(x=Time, y=dummydata[,i+1]))+geom_point()) dev.off()} 。案例:

  1. 我有rebase分支与当前版本的应用。
  2. 我为新功能创建master
  3. 我在feature-branch
  4. 中做了一些提交
  5. 我在主分支中做了一些热门提交
  6. 现在我希望在feature-branch中进行提交,在这种情况下我会feature-branch
  7. 我完成了rebase,我只是将它合并为主。

    feature-branch
  8. 这使我可以位于git checkout master git checkout feature-branch git commit -am "feature commit #1" git commit -am "feature commit #2" git commit -am "feature commit #3" git checkout master git commit -am "hot fix" git checkout feature-branch git rebase master git commit -am "i'm done" git checkout master git merge feature-branch 分支的顶部并拥有干净的git历史记录。