Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修复与Git重设基础和导出的合并冲突_Git_Merge_Rebase - Fatal编程技术网

修复与Git重设基础和导出的合并冲突

修复与Git重设基础和导出的合并冲突,git,merge,rebase,Git,Merge,Rebase,我遇到了一些与git rebase的合并冲突 我的问题是,如果我解决了冲突,我是否会这样做: git add files git commit "fixed merge conflicts" 然后继续 git rebase --continue 我的另一个问题是,如果我搞砸了,我能做什么 git rebase --abort 这会删除所有提交吗?git-rebase--abort将完全退出rebase,基本上将存储库恢复到启动rebase之前的时间点。唯一丢失的提交将是git-rebas

我遇到了一些与git rebase的合并冲突

我的问题是,如果我解决了冲突,我是否会这样做:

git add files
git commit "fixed merge conflicts"
然后继续

git rebase --continue
我的另一个问题是,如果我搞砸了,我能做什么

git rebase --abort 
这会删除所有提交吗?

git-rebase--abort
将完全退出rebase,基本上将存储库恢复到启动
rebase
之前的时间点。唯一丢失的提交将是
git-rebase
创建的全新提交(因为
git-rebase
重放原始提交,从而形成新的提交)

无论是否中止,都不会触及原始提交。

将完全退出rebase,本质上是将存储库恢复到启动
rebase
之前的时间点。唯一丢失的提交将是
git-rebase
创建的全新提交(因为
git-rebase
重放原始提交,从而形成新的提交)

无论是否中止,都不会触及原始提交。

基于,您真正的问题是是否应该将原始提交链保存在某处/以某种方式保存

在某种基本级别上,Rebase是通过复制来工作的(因为提交永远无法更改,这包括它们的向后链接)。分支名称只是指向某些特定的提交。如果我们将提交绘制为图形中的节点,我们得到的结果如下所示:

...--F--G--H--I   <-- origin/whatever
         \
          J--K--L   <-- your-branch
git-rebase
的最后一步是删除当前粘贴分支的名称
your-branch
,指向commit
L
,并使其指向commit
L'
——rebase制作的最后一个副本:

                J'-K'-L'  <-- your-branch (HEAD)
               /
...--F--G--H--I   <-- origin/whatever
         \
          J--K--L   [abandoned]

在开始ReBASE或ReBASE中间的任何时候,当<代码>您的分支仍然指向提交“代码> L>代码>时,可以添加一个新的名称来记住提交<代码> L>代码>的原始哈希ID:

                J'-K'-L'  [abandoned]
               /
...--F--G--H--I   <-- origin/whatever
         \
          J--K--L   <-- your-branch (HEAD)
                J'-K'  <-- HEAD
               /
...--F--G--H--I   <-- origin/whatever
         \
          J--K--L   <-- your-branch, extra-name
您不必这样做,因为,
git rebase
秘密地设置了一个特殊的名称,
ORIG_HEAD
,以记住您的分支名称在它将其从
L
中拉出并粘贴到
L'
之前的位置。但是名称
ORIG_HEAD
将被您稍后使用的任何其他Git命令(可能是另一个rebase)覆盖,该命令会像这样猛拉标签,因此,如果您不喜欢结果,您可以使用这种短期权宜之计来恢复

Git还记录分支名的reflog,即分支名的前一个值,即
Your branch
用于指向提交
L
而不是
L'
。这些reflog条目持续30或90天。1尽管它们不是最容易使用的东西:

git reflog your-branch
将溢出所有内容,但您得到的是每次提交中使用的一行摘要,并且当您使用
git-rebase
时,通常会将原始的一行摘要从提交
L
复制到提交
L'
,因此很难区分哪个是哪个

尽管如此,
ORIG_HEAD
和reflogs的一些组合通常可以让您恢复,而不需要额外的名称。如果让你更舒服,可以使用这个额外的名字。我经常这样做:如果我正在处理
feature/X
,并且需要重新设置基址,我会创建
feature/X.0
,然后重新设置基址。我最初的提交系列现在作为点零版本提供。几天后,如果我需要做另一个重基,我会创建
feature/X.1
,然后重基。因此,
feature/X
是最新的,而
feature/X.
是旧的,还有更多的旧的,直到我自己把它们收集起来扔掉


1从技术上讲,30天后到期的提交使用的是
expireUnreachable
时间:这些提交无法从引用的当前值访问。Rebase通常会进行此类引用,因此默认的30天到期时间是您应该关注的时间

(可访问的Reflog条目将获得90天的默认值。)

基于,您真正的问题是是否应该将原始提交链保存在某处/以某种方式保存

在某种基本级别上,Rebase是通过复制来工作的(因为提交永远无法更改,这包括它们的向后链接)。分支名称只是指向某些特定的提交。如果我们将提交绘制为图形中的节点,我们得到的结果如下所示:

...--F--G--H--I   <-- origin/whatever
         \
          J--K--L   <-- your-branch
git-rebase
的最后一步是删除当前粘贴分支的名称
your-branch
,指向commit
L
,并使其指向commit
L'
——rebase制作的最后一个副本:

                J'-K'-L'  <-- your-branch (HEAD)
               /
...--F--G--H--I   <-- origin/whatever
         \
          J--K--L   [abandoned]

在开始ReBASE或ReBASE中间的任何时候,当<代码>您的分支仍然指向提交“代码> L>代码>时,可以添加一个新的名称来记住提交<代码> L>代码>的原始哈希ID:

                J'-K'-L'  [abandoned]
               /
...--F--G--H--I   <-- origin/whatever
         \
          J--K--L   <-- your-branch (HEAD)
                J'-K'  <-- HEAD
               /
...--F--G--H--I   <-- origin/whatever
         \
          J--K--L   <-- your-branch, extra-name
您不必这样做,因为,
git rebase
秘密地设置了一个特殊的名称,
ORIG_HEAD
,以记住您的分支名称在它将其从
L
中拉出并粘贴到
L'
之前的位置。但是名称
ORIG_HEAD
将被您稍后使用的任何其他Git命令(可能是另一个rebase)覆盖,该命令会像这样猛拉标签,因此,如果您不喜欢结果,您可以使用这种短期权宜之计来恢复

Git还记录分支名的reflog,即分支名的前一个值,即
Your branch
用于指向提交
L
而不是
L'
。这些reflog条目持续30或90天。1尽管它们不是最容易使用的东西:

git reflog your-branch
会把它们都吐出来,但是w