JGit 不拉远程复位

JGit does not pull the remote reset

我看到一个奇怪的行为,我不知道它是错误还是功能。 从机器 #1 我做 git reset --hard someCommit && git push -f。然后将重置传播到所有机器(我可以通过从另一台机器执行 git pullgit log 来查看更改)。

我从运行 JGit 的机器 #2 执行:git.pull().call() 但未应用重置,磁盘上的文件未更改。此外 git.log().call() 不指向还原的提交。

我做错了什么?

我认为 git.pull.call() 命令被拒绝了。您执行了以下命令:

git reset --hard someCommit
git push -f

第一个应该将分支完全重置为 someCommit。第二个强制将重置分支推送到远程,重写进程中分支的历史记录。这里的关键字是 -f--force.

的缩写

因为你重写了这个分支的历史,其他计算机将无法再做简单的git pull,因为分支的基础已经改变了。所以我相信您对 git.pull().call() 的 JGIT 调用失败并出现错误。要解决此问题,您需要 "force" 拉取其他计算机上的分支:

git fetch --all
git checkout someBranch
git reset --hard origin/someBranch

Tim所述,您可能需要强制在其他计算机上获取。

PushCommand::call() 的 return 值会告诉您推送是否成功以及为什么失败。

要在 JGit 中强制拉取,请遵循以下示例:

git.fetch()
  .setForce( true )
  .setRefSpec( new RefSpec( "refs/heads/someBranch:refs/remotes/origin/someBranch" ) )
  .call();
git.reset()
  .setMode( ResetType.HARD )
  .setRef( "someBranch" )
  .call();