标签: git-rebase

`git fetch`然后`git rebase`和`git pull --rebase`有什么区别?

在阅读git pull页面时,它给出了以下严厉的警告git pull --rebase:

这是一种潜在危险的操作模式.它重写了历史,当你已经发布了这段历史时,它并不是一个好兆头.除非您仔细阅读git-rebase(1),否则请勿使用此选项.

git rebase页面中,它提供了大量描述,但没有这种警告.

另外,我见过有人这么说

git fetch
git rebase
Run Code Online (Sandbox Code Playgroud)

是相同的

git pull --rebase
Run Code Online (Sandbox Code Playgroud)

而其他人说他们略有不同.

真相是什么?

git git-rebase

41
推荐指数
2
解决办法
2万
查看次数

git rebase upstream/master vs git pull --rebase upstream master

有没有之间的差异git rebase upstream/mastergit pull --rebase upstream master,如果是这样,是什么?遥控器可以是任何遥控器,不一定是上游遥控器.

git git-pull git-rebase

41
推荐指数
1
解决办法
4万
查看次数

如何在git rebase期间通过哈希识别冲突提交?

当我遇到使用合并冲突时git rebase,如何根据提交识别冲突的来源,而不仅仅是文件差异?

我已经知道如何使用(git mergetool或基本)使用或git add之前git rebase --continue,但有时文件之间的差异是不够的:我想看到提交的提交日志和差异,但未能应用于工作树.

我已经读过其他问题,git log --merge如果我使用的话会显示父提交git merge.当我遇到冲突并被告知时,我还是尝试过fatal: --merge without MERGE_HEAD?.

如何识别有问题的提交?

git merge git-rebase

40
推荐指数
4
解决办法
6625
查看次数

Git - 移动推送到不同的分支

我的老板最近决定尝试一个"增加容量"的外包小组,因为我们修改现有的应用程序以添加新功能.尽管我担心他所选择的小组似乎并没有很好地沟通,也没有提出足够的问题来真正理解和有效,但我们还是和他们一起去了.

我们将它们设置为在我们的Git存储库(托管在GitHub上)上进行协作.我们为他们创建了一个分支(TheOutsourcedBranch,我们称之为),并要求他们在这个分支中完成所有工作.

此外,我们要求他们在每天结束时推送他们的提交,以便我们可以很好地了解他们的工作速度,以及(更重要的是)他们的代码有多好.

今天他们第一次推了推.五个提交,所有这些都是主人.我正在试图弄清楚如何将他们的提交从master转移到TheOutsourcedBranch,而不会丢失他们已经完成的工作(尽管从它的外观来看,无论如何我们都不得不扔掉它).

视觉参考 - 橙色点是他们的提交,灰色是我的.

橙点是他们的承诺,灰点是我的.

我知道有很多关于变基的问题(这可能是我在这里需要做的)但我很难弄清楚哪些适用于我的具体情况.如果重要的话,外包集团和我自己是现在唯一真正使用回购的人.

提前致谢!


编辑: 我可能已找到我正在寻找的内容:使用Git将最近的提交移动到新的分支

不过,我想检查一下我的理解.在本地,我创建了一个主要的分支(TheOutsourcedBranch),它将包含所有AH.然后我将主人重置为C.主人现在包含AC.

假设这是正确的,那对我(本地)来说没问题.但是,我需要做些什么才能"强制"远程存储库(GitHub)接受我对本地事件如何发挥作用的本地视图并丢弃其历史版本?

一旦这个问题发生了,我想我可以重新解决这个问题,使其更具通用性/信息性,并减少一些毛病 - 否则它可能是一个很好的删除候选人,我猜.

git github rebase git-rebase

40
推荐指数
1
解决办法
2万
查看次数

当git重新提交很多提交时如何防止大量的git冲突?

故事:在一个项目的中间,我的同事从大师那里创建了一个新的分支,并开始进行繁重的重新分解工作.我从master创建了我的分支,并开始在页面上做新的东西.我们经常提交,但只有我可以修改代码才能掌握(因为同事的更改太重,无法从主服务器部署).不幸的是,我们的一些工作依赖于相同的文件.因此,经过几天的工作,她终于想要改变主人的变化,她有很多git冲突.

my_branch    #---#----#-#-------#----#--#-----#---#----#----#
            /     \              \   \   \              \    \
master     *-------*--------------*---*---*--------------*----*----*
            \                                                     /
her branch   #------#-------#-----------#-----------#------------#
Run Code Online (Sandbox Code Playgroud)

问题1是:当我们处理相同的文件时,如何防止大量的git冲突?(或者在这种情况下最佳做法是什么?)

但这不是我们问题的结束,...绝对正确她试图从主人到她的分支进行变基(为了进行我所做的更改),所以提交映射应该看起来像这样

my_branch    #---#----#-#-------#----#--#-----#---#----#----#
            /     \              \   \   \              \    \
master     *-------*--------------*---*---*--------------*----*----*
            \                   \            \                    /
her branch   #------#-------#----*------#-----*-----#------------#
Run Code Online (Sandbox Code Playgroud)

这就是困扰我们的事情.在这些改变期间,她正在解决这些冲突.但是git不记得她关于冲突修复的决定,所以当她从主人她的分支做另一个git rebase时,她不得不再次修复同样的git冲突,以至于她在以前的rebase 中修复了.

问题2是:如何告诉git在分支git rebase之后记住git冲突修复,那么在下一个rebase之后我们不必再次修复相同的冲突了?

git rebase git-rebase

39
推荐指数
3
解决办法
1万
查看次数

git rebase出错("无法应用......")

我是GitHub存储库https://github.com/plison/opendial的管理员.我想减少存储库中的提交数量,因为存储库已经有几千个提交,其中许多是可以轻松压缩在一起的小调试更改(特别是几年前的那些).

因此,我正在尝试应用变基,以便压缩我的部分提交.但是,我遇到了以下问题:

  1. 当我输入例如git rebase -i HEAD~10,我在交互式编辑器中获得了相当多的提交行(远远超过10).可能是什么原因?
  2. 更重要的是,一旦我关闭交互式编辑器以启动变基,我系统地得到错误消息"错误:无法应用",即使我没有对提交进行任何更改(即,如果我将所有行保留为'pick' ,无需任何修改或重新排序).

我该如何解决这些问题?应该注意的是,存储库是从Google Code上托管的先前(SVN)存储库自动导入的.到目前为止转换似乎运行良好,但我想知道为什么我在尝试重新提交我的提交时会遇到这些错误.

git github git-svn rebase git-rebase

38
推荐指数
2
解决办法
3万
查看次数

为什么在使用git rebase时会再次出现相同的冲突?

我已经在SO上阅读了关于git merge和git rebase的相关问题,但我仍然无法完全理解幕后发生的事情.

这是我们的分支情况:

MASTER------------------------
        \        \
         \        \----Feature B---
          \                        \
           \-----Feature A----------\---Feature A+B
Run Code Online (Sandbox Code Playgroud)

我们有2个功能分支,它们来自不同时间的master,现在我们想要组合2个分支.我们希望遵循这种first rebase then merge做法,但是当我们将功能A重新命名为功能B时,我们会遇到冲突.这是预期的,因为两个功能(和主人)在相同的区域都有变化.但奇怪的是,同样的冲突在此之后不断出现git rebase --continue.这让我们疯狂,所以我们最终中止了rebase,并使用了git merge.事实证明,冲突实际上很容易解决.

我的问题是双重的:

  1. git rebase适合我们situtation?或者,只有少数(1或2)变化才能改变?
  2. 引擎相同的冲突会一次又一次地重现?我的理解是一次rebase解决一个冲突,但通过比较哪个提交到什么?

关于SO的相关帖子:

git merge git-merge git-rebase

36
推荐指数
1
解决办法
1万
查看次数

git rebase - 'edit'和'reword'之间的区别是什么

什么之间的区别edit,并reword当你做一个git的变基?

我正在通过一些文档说这个:

Replace pick with:
- edit to mark a commit for amending.
- reword to change the log message.
Run Code Online (Sandbox Code Playgroud)

git git-rebase git-rewrite-history

35
推荐指数
2
解决办法
6898
查看次数

如何避免git rebase查杀合并提交?

鉴于以下git历史:

    C-I    origin/master
   /
A-B-F-G-H  master
 \   /
  D-E      branch-b
Run Code Online (Sandbox Code Playgroud)

我想重新定义我的本地master分支origin/master,但我想保留合并提交G.当我尝试简单地做git rebase origin/master一会儿时master就被压扁了D..E,G并用提交消息提交了E,所以有一个合并的历史丢失了.有没有办法保留这个合并,同时仍然得到rebase?为清楚起见,我的预期结果是:

A-B-C-I-F-G-H  master
 \       /
  D-----E      branch-b
Run Code Online (Sandbox Code Playgroud)

git version-control git-merge git-rebase

34
推荐指数
1
解决办法
6722
查看次数

如何从一个重新分支的分支机构中重新分支?

所以我的历史看起来像这样:

o---o---o---o master \ o---o---o A \ o B

所以,解释一下:

  • 我有A从哪个分支开始master
  • 我有一个分支B(只有1个提交)从哪个开始A

我想要的是这个:

o---o---o---o master \ o---o---o A \ o B


我做的是:

1).

git checkout A git rebase master

这导致了许多冲突,经过一段时间的修复后,出现了以下历史:

o---o---o---o master \ o---o---o A

这正是我想要的.

(我不知道B现在在哪里)


2).

在此之后我做了很多南瓜并改变了提交的顺序A,使历史看起来像我想要的.


3).

现在,我还想做的是:

git checkout B git rebase A

然而,这似乎不起作用,我不知道为什么.如果我这样做,git log我会在执行第1步之前看到那些提交.

此外,我得到了我在步骤1中已经解决的大量冲突.我花了很多时间去做,不想再这样做了.

这个例子建议使用--onto,我做了:

git checkout B git rebase --onto A

但是这会B完全删除提交,AB指向同一个提交,即最后一个提交 …

git branch rebase git-rebase

34
推荐指数
2
解决办法
4468
查看次数