相关疑难解决方法(0)

樱桃挑选Git意味着什么?

最近,我被要求cherry-pick提交.

那么,在git中挑选一个提交意味着什么呢?你怎么做呢?

git cherry-pick git-cherry-pick

2117
推荐指数
11
解决办法
101万
查看次数

Rebase只是分支的一部分

我有两个分支(和主人).分支2基于分支1是基于主.我已经提交了分支1进行审核,它有一些更改,我将其中一些更改重新编入历史记录并将结果合并到主数据中.

现在我需要在master上重新设置Branch 2以准备审查/合并.

问题是分支2仍然包含分支1的原始提交,它不再存在,因此git会混淆.我尝试使用rebase -i删除Branch 1的原始提交,但是Branch 2的提交不基于master-before-branch-1.

我需要做的是采取分支2,删除一些提交,并在一次操作中仅重新设置master上的剩余提交.但我只知道如何在两个不同的步骤中完成这两项操作.

我怎样才能将我的分支部分重新分支到另一个分支,删除所有不具有共同祖先的提交,除了我指定的那些(例如从HEAD~2起)?

这是当前状态:

master                     new branch 1
- - - - - - - - - - - | - - - - - - - - -
    \
     \   branch 1
      \ _ _ _ _ _ _ _
                     \
                      \     branch 2
                       \ _ _ _ _ _ _ _
Run Code Online (Sandbox Code Playgroud)

我最终想要的是:

master            new branch 1    
- - - - - - - | - - - - - - - - …
Run Code Online (Sandbox Code Playgroud)

git

41
推荐指数
3
解决办法
7875
查看次数

你如何检测git中的邪恶合并?

我已经创建了一个简单的git repo来说明我的问题,可以在GitHub上找到:https://github.com/smileyborg/EvilMerge

这是回购历史的例证:

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

(在GitHub上的实际回购中,D4a48c9,I48349d.)

D是一个"简单"的邪恶合并,其中合并提交"正确"解决了合并冲突,但也产生了一个不相关的"邪恶"变化,这两个变化在父系统中都不存在.通过git show -c在此提交上使用,可以发现此合并的"邪恶"部分,因为输出包括++--(而不是单个+-)以指示父级中不存在的更改(请参阅上下文的答案).

I一种别样邪恶的合并,其中合并提交"正确"的解决合并冲突(从变化所引起F,以file.txt与变化相冲突G),也有"邪恶"丢弃到一个完全不同的文件中所做的更改file2.txt(有效撤消变化H).

你怎么知道这I是一个邪恶的合并?换句话说,您可以使用哪些命令来发现I不仅手动解决冲突,而且还无法合并应该具有的更改?

编辑/更新:什么是邪恶合并?

正如下面的RenéLink所指出的那样,很难(或许不可能)定义一套通用标准来识别"邪恶合并".然而,就像最高法院大法官斯图尔特所说的关于色情内容一样,当你看到邪恶的合并是你所知道的.

因此,或许更好的问题是:在合并提交中可以使用什么git命令来获得仅在合并提交本身中引入的所有新颖更改的diff输出.这种差异应包括:

  • 所有合并冲突解决方案(至少,如果决议涉及的事情比选择一个父母的变化比另一个更复杂)
  • 父母之间不存在的所有添加或删除(如中所示D)
  • 其中一个父项中存在的所有更改但合并提交丢弃(如中所示I)

这里的目标是能够让人类看看这个输出并知道合并是否成功或(意外或恶意)"邪恶",而 …

git git-merge

28
推荐指数
4
解决办法
2755
查看次数

Git Merge承诺进入一个孤儿分支

我很想知道你是否可以,如果将提交合并到我的孤儿分支中是否有任何问题.对于此特定实例,我的Salesforce存储库具有主分支和预发布分支,但由于我们的沙箱环境通常具有不属于生产的元数据,但我们希望对其进行版本控制,但与我们的干净预发布分支分开.

因此,我们有以下内容:

(Production Init Commit)    (official release)
 /                         /
o-------------------------o [master]
 \                       /
  o------o---------o----o [pre-release]
          \       /
           o-----O [feature]
                  \ <-- IS THIS ALLOWED/POSSIBLE/BAD IDEA?
                   \ 
       o------------O [DEV] (orphan branch)
      /
     (Initial commit from our sandbox environment)
Run Code Online (Sandbox Code Playgroud)

git merge orphan

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

git - 暂时将其他分支合并到我当前的分支中

我有一个情况.比方说,两个开发人员是在两个不同的分支工作AB.

 -- master --
|            |
A     <--    B  
Run Code Online (Sandbox Code Playgroud)

分支B取决于变化A.但是,A的变化尚未合并master.我想开始处理我的功能(分支B)并进行更改A,然后在完成测试后丢弃它们.推荐的方式是什么?

git git-merge

10
推荐指数
1
解决办法
3083
查看次数

其他提交完成后,从git rebased分支中删除提交

我有一个项目有两个分支,名为masterfeature/x.在feature/x上我正在处理将在master上合并的新功能.

对于feature/x上的错误,基于master的rebase操作已完成并被推送.除了其他提交已完成并推送功能/ x.

所以我有两个分支,包含由不同哈希标记的"相同提交".

A -- B -- C -- D [master]
 \
  E -- F -- G -- H -- I [feature/x]
Run Code Online (Sandbox Code Playgroud)

其中CD分别是相同的提交(衍合)FG特征/ X.

我想删除FGfeature/x维护HI.我该怎么做?

我想恢复提交

git revert F G
Run Code Online (Sandbox Code Playgroud)

来自feature/x,但那些无用(重复)提交将保留在历史记录中.我想知道是否有更好的方法来做到这一点?

git rebase revert

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

如何压缩有孩子的分支上的提交

所以我遇到了一个情况,有一个主分支和一个继续它的错误修复分支。我尝试压缩 master 上的一些提交,然后重新修复 bugfix,但遇到了合并冲突。正确的做法是什么?我在本地工作,没有远程。

它看起来像这样:

A - B - C - D - E - F [master]
                     \                 
                      G - H - I - J - K [bugfix]
Run Code Online (Sandbox Code Playgroud)

我想压缩 A - B - C - D - E - F 并且仍然有错误修复继续压缩的主分支。

git rebase squash

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

从执行 Git Rebase 的 Netbeans 错误中恢复

问题是:我有一个项目,我通过 netbeans 连接到我的实时 git 存储库,并进行了提交。然后我试着拉代码,我收到一条消息,我是想和master合并还是我想rebase,我不小心rebase了。现在我的本地项目中没有初始化任何 git repo(从 USB 复制代码)。Rebase 初始化了一个 git repo 的副本。这个动作发生的事情真的很烦人。我在当前目录中所做的所有更改都被删除的文件也被删除了,我已经恢复了被删除的文件。但是我仍然无法回到rebase之前的状态(即新鲜状态)。任何帮助都会非常有帮助。

git netbeans github git-rebase

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

移动所有提交超出主要的初始提交

我一直在开发提交主分支,并希望将所有提交超出"初始提交"到一个单独的开发分支,并保持主版本的发布版本.

现在,我的树看起来像这样:

master: A - B - C - D - E - F
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样:

development:   B - C - D - E - F
              /
master:      A -----------------
Run Code Online (Sandbox Code Playgroud)

这样我就可以像这样合并一个版本:

development:   B - C - D - E - F --- X
              /                       \
master:      A ----------------------- Y
Run Code Online (Sandbox Code Playgroud)

有人可以建议最好的方法吗?我已经看到了类似但不是确切的案例的其他答案,但我不想冒险搞砸了.

git branch commit master

0
推荐指数
1
解决办法
138
查看次数