git:重置分支吞下master分支

时间:2020-06-22 05:31:24

标签: git bitbucket git-reset

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

$ 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,并且在请求请求页面中看到一棵乱七八糟的树。

我们使用bitbucket。谢谢。

1 个答案:

答案 0 :(得分:0)

据我了解,您的队友大概做了

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

虽然此过程在某些情况下会起作用,但在其他情况下却不会起作用。我猜想您的队友不通过在主服务器上执行git pull或通过执行git remote -v update来获取最新的更改,从而使分支机构过时了。然后,他做了git reset --<whatever>进行更新并强行推动了分支。这意味着他们推送的提交历史与母版的分歧更多,而不仅仅是他们想要更改的提交,其他提交可能会在此处出现。

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

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可能会在过时的本地存储库和分支之间流氓。确保其主服务器上的提交历史记录与主仓库上的提交历史记录相同,并确保未选中并重新选中设置中的“自动同步”按钮。确保它说它是最近一次同步的。从那里,他们需要更新其本地信息以及所有这些好东西。