JGit不会拉远程重置

时间:2016-06-21 23:10:25

标签: jgit git-reset

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

从运行JGit的机器#2执行:git.pull().call()但是未应用重置且磁盘上的文件未更改。 git.log().call()也没有指向恢复的提交。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

git reset --hard someCommit
git push -f

第一个应该将分支完全重置为someCommit。第二个力将重置分支推送到远程,重写过程中分支的历史。此处的关键字为-f,是--force的缩写。

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

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

答案 1 :(得分:1)

与所述的Tim类似,您可能需要在其他计算机上强制抓取。

PushCommand::call()的返回值将告诉您推送是否以及为何没有成功。

要强行拉入JGit,请遵循以下示例:

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