【问题标题】:Discard Git commits & merge feature branch back to Master放弃 Git 提交并将功能分支合并回 Master
【发布时间】:2015-12-28 09:42:21
【问题描述】:

  • 首先我在 Master 分支上工作并提交了 3 次提交:Wijzing 1、2、3
  • 然后我在提交 Wijziging 1 时进行了 checkout...
  • 然后我创建了一个新分支new-feature并开始进行更改。
  • 现在我想丢弃 2 个提交:Wijzing 2Wijziging 3
  • 我想将 新功能 与 Master 合并。

更新:

在这些步骤之后,我执行以下操作:

git checkout master
git reset --hard HEAD^^
git merge new-feature

然后我点击 SourceTree 中的 push

更新: 解决办法是强制推送:

git push -f

强制推动后它再次起作用。

【问题讨论】:

  • 你的意思是你想把 1、2 和 3 的提交压缩在一起吗?还是您想放弃 wijziging 1 和 2 的更改?
  • 这实际上是“存储库”还是只是示例?如果您有一些真正的存储库,您已将 chagnes 发布到远程,请谨慎。
  • @Mateusz 我创建了一个假存储库来练习;)。
  • 不需要用 git 创建练习库,因为没有任何东西被破坏。事物总是被创造出来的!只需要学习 3 件事以始终处于良好状态: 1. 创建分支作为保存点 2. 学习 git reset 将分支移动到另一个地方 3. 最后,如果您忘记保存,请学习 git reflog在做某事之前指出并没有以您希望的方式结束!现在,你是一个 git 专家!!并且可以尝试任何你想要的......

标签: git git-branch git-merge atlassian-sourcetree


【解决方案1】:

这应该可以解决问题:

git checkout master
git reset --hard HEAD^^
git merge new-feature

基本上,您需要将master 分支指针移回两个提交,然后将new-feature 分支合并到它。请注意,git reset --hard 是一个潜在的危险命令,因为它会丢弃对工作副本中跟踪文件的任何更改。

如果丢弃的提交已经被推送到远程,你可能需要强制推送:

git push -f 

【讨论】:

  • 或者直接在签出 master:git reset --hard new-feature 之后,一旦你对你的历史感到满意,不要忘记强制推送......
  • @Philippe:是的,除非你想创建一个合并提交。
  • @eugeney 我已经添加了您的更改。看起来不错,但我无法推送到服务器。当我拉动时,我想扔掉的零钱又回来了。有什么想法吗?
  • 如果您问自己为什么在 Windows 上的 sourcetree 中没有强制推送,请随意投票支持此功能请求,因为 atlassian 不想添加它 :-( 即使他们在macOS jira.atlassian.com/browse/SRCTREEWIN-338
【解决方案2】:

在您的特定情况下,一个简单的

git checkout new-feature
git branch -f master
git checkout master

后跟一个

git push -f

应该可以解决问题。 git branch -f 命令只是将master 分支指向当前的HEAD,丢弃了master 的旧历史。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2021-03-22
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    相关资源
    最近更新 更多