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