Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do git reset & push use slashes vs spaces between remote and branchname?

A hard git reset is often used after a force push or forced update to copy all remote changes of a branch. For example after a rebase and a force push with

git push --force origin my_branch

your team member can use

git reset --hard origin/my_branch

to get the updated branch. The question is why do you have to specify a slash / for git reset, but not for git push ?

like image 807
0x4a6f4672 Avatar asked Aug 05 '16 13:08

0x4a6f4672


Video Answer


2 Answers

This is more of a long comment rather then a proper answer.

I suppose generic answer to this would be something like:

"it has been programmed that way"

On a more serious note, perhaps it has something to do with the resources and their location. What I mean by resources here is local or remote.

Let's look at the two commands you've mentioned in your original post.

git push -f <remote> <branch>

So what does push actually do? Simplistically it takes whatever you've got on your local repository and pushes it upstream to the remote repository. How would we do that? From design perspective, if you think about it, it makes a perfect sense to pass two parameters in this case a remote a place where you will send your changes and branch from your local system which you will be preserving long-term.

Next, let's look at

git reset --hard <remote>/<branch>

This instruction basically resets your working directory to whichever index you specify. Also, note this is all done from your local file system and this is the difference between the two commands you've brought up in your OP.

like image 97
e.doroskevic Avatar answered Nov 15 '22 05:11

e.doroskevic


The git push command first takes a remote parameter, where you specify the repo you're pushing to followed by the local branch ref to update the corresponding remote branch with.

git reset, however, takes a single path parameter where you are specifying the branch of the remote repo (via a path) to reset the local copy to.

To answer your question directly, the reason you need a slash for git reset is because it takes one parameter which is a path rather than git push which takes two separate parameters: a remote and a branch.

You may wish to refer to git push and git reset official documentation for Git.

like image 44
Dylan Wheeler Avatar answered Nov 15 '22 05:11

Dylan Wheeler