Reputation: 3
I need to run the command
git reset --hard origin <branch-name>
via JGit to reset corrupt local commits done by users, and I'm using following code:
git.reset().setRef(<branch-name>).setMode(ResetCommand.ResetType.HARD).call()
but it doesn't overwrites local commits and pointing to current remote HEAD.
I have tried with git.fetch()
and git.pull()
previous to git.reset()
but it doesn't work, is there another method I need to use?
Also, how to print result why it's failing, I see that .call()
returns Ref
but the Ref
object doesn't have messages, only ObjectId
.
Upvotes: 0
Views: 389
Reputation: 319
Adding to the answer, Remote tracking branch can be determined by following line, instead of manually building the string
new BranchConfig(git.getRepository().getConfig(), git.getRepository().getBranch();
this returns branch name as refs/remotes/origin/main
Reset can be done as below
git.reset()
.setMode(ResetType.HARD)
.setRef(new BranchConfig(git.getRepository().getConfig(), git.getRepository().getBranch())
.getTrackingBranch())
.setProgressMonitor(new SimpleProgressMonitor())
.call();
Upvotes: 0
Reputation: 21025
Note, that git reset --hard origin <branch-name>
is not a valid Git command. To reset the current HEAD to a remote branch, you need to specify the branch as origin/<branch-name>
. This is a short form of refs/remotes/origin/<branch-name>
. Is it this what you mean?
If you are specifying refs/heads/<branch-name>
, then you are referring to a local branch. See also What are the differences between local branch, local tracking branch, remote branch and remote tracking branch?
The equivalent JGit command is
git.reset()
.setRef("refs/remotes/origin/<branch-name>")
.setMode(ResetType.HARD)
.call()
Call fetch
or pull
only if you want to include updates that took place in the remote repository. Note, that pull
is just a composite command of fetch
, followed by rebase
or merge
(depending on the configuration). It tries to rebase or merge the remote branch into the local branch (i.e. refs/remotes/origin/<branch-name>
into refs/heads/<branch-name>
) and will fail with a dirty working directory. This is likely not what you want.
Upvotes: 1