我看到一种奇怪的行为,我不知道这是一个错误还是一个功能。
从机器#1我做git reset --hard someCommit && git push -f
。然后将重置传播到所有计算机(我可以通过从另一台计算机执行git pull
或git log
来查看更改。)
从运行JGit的机器#2执行:git.pull().call()
但是未应用重置且磁盘上的文件未更改。 git.log().call()
也没有指向恢复的提交。
我做错了什么?
答案 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();