JGit 不拉远程复位
JGit does not pull the remote reset
我看到一个奇怪的行为,我不知道它是错误还是功能。
从机器 #1 我做 git reset --hard someCommit && git push -f
。然后将重置传播到所有机器(我可以通过从另一台机器执行 git pull
或 git 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();
我看到一个奇怪的行为,我不知道它是错误还是功能。
从机器 #1 我做 git reset --hard someCommit && git push -f
。然后将重置传播到所有机器(我可以通过从另一台机器执行 git pull
或 git 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();