【问题标题】:git: reset branch swallow up master branchgit:重置分支吞噬主分支
【发布时间】:2020-10-11 22:26:43
【问题描述】:

我的 git 历史记录出了点问题。当我使用以下一些命令时,其中一个分支会窃取主分支提交:

$ git clone [repo_url]
$ git checkout [branch_A_name]  -- This branch has a commit
$ git reset --soft [revision_hash]   -- same as HEAD~1
$ git add [some_files]
$ git commit
$ git push -f

在这之后,我发现我已经合并到 master 分支的一些提交被 branch_A 窃取了,这是我之前强制推送的。这些差异已从 master 中删除。

其实,这不是我的。我的队友就是这种情况,听说他们没用过git rebase
他们刚刚做了reset - commit - force push,然后在他们的拉取请求页面中看到了一棵乱七八糟的树。

我们使用比特桶。谢谢。

【问题讨论】:

  • branch_Amaster 有什么关系?您采取的步骤没有任何问题...假设这是您真正想做的事情。
  • @TimBiegeleisen 正如您所预料的那样,branch_Amaster 不同。就这样。他们不再纠结了。
  • 请附上branch_Amaster前后的分支图。

标签: git bitbucket git-reset


【解决方案1】:

据我所知,你的队友可能做过

git reset  --<probably hard> master
<made changes>
git add <changes>
git commit -m <“message”>
git push -f <whatever> 

虽然此过程在某些情况下有效,但在其他情况下无效。我猜你的队友通过不在 master 上执行 git pull 或在推送前执行 git remote -v update 以获取最新更改而让他们的分支过时。然后他做了一个git reset --&lt;whatever&gt; 来更新并强制推送分支。这意味着他们推送的提交历史与 master 的不同之处不仅仅是他们想要更改的提交,而且其他提交可能会显示在那里。

要解决这种情况,他们需要

git checkout master
git pull
git checkout feature branch
git rebase <master or origin/master>
git log 
<check if commits are correct in the log>
git diff --name-only origin/master
<check if only his commit appears>
git push -f origin <branch name> 

此外,如果您在 Atlassian 上使用 Forks,则可能会出现另一种情况 - 他们的 fork 是不同步的。尽管 Atlassian 分叉通常设置为自动同步,但 git push -f 没有指定分支名称可能会在过时的本地存储库和分叉之间发生流氓行为。确保他们的 master 上的提交历史与主 repo 上的相同,并且他们取消选中并重新选中设置中的“自动同步”按钮。确保它说它是最近一次同步的。从那里他们需要更新他们的本地和所有好东西。

【讨论】:

  • 不幸的是,本地最新和远程之间没有额外的提交。他们新克隆了遥控器并进行了软重置以修复某些问题。它不是最新的——据我所知。但我希望你的建议可以拯救一个人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2014-09-19
  • 2022-11-09
  • 2021-08-20
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多