Re: EasyGit Integration
- From
Felipe Contreras <felipe.contreras@gmail.com>
- Date
- Jun 12, 2009, 21:48 UTC
- Message-ID
- <94a0d4530906121448m57f272eej32e8d57e48002f1f@mail.gmail.com>
- In-Reply-To
- <200906122321.57479.jnareb@gmail.com>
On Sat, Jun 13, 2009 at 12:21 AM, Jakub Narebski<jnareb@gmail.com> wrote:
Show 22 quoted lines
> On Fri, 12 Jun 2009, Felipe Contreras wrote: >> On Thu, Jun 11, 2009 at 3:42 AM, Jakub Narebski<jnareb@gmail.com> wrote: >>> On Thu, 11 June 2009, Felipe Contreras wrote: > >>>> 'git reset' also gets something out of the repository and into the >>>> working area, that's not reason enough to put them under the same >>>> 'checkout' command, is it? >>> >>> Nope. 'git reset' resets something to the state in repository (to given >>> commit). The fact that some combination of options for 'git reset' gives >>> the same result as some specific combination of options of 'git checkout' >>> means only that one can arrive at some destination in two different ways. >> >> You can describe what 'git reset' does in many ways, but in the >> process it's still getting something out of the repository and into >> the working directory, does it not? 'git checkout <commitish>' and >> 'git checkout <commitish> -- <path>' also do that. > > Nope. 'git reset' always reset some part of state to a given commit, > HEAD by default. It can reset current branch with --soft, branch plus > index with --mixed (default), and branch plus index plus working > directory with --hard. Source is always commit.
You said it: 'git reset --hard' gets something out of the repository and into the working directory.
Try this: git checkout <random sha-1 with no ref>
Then what is the difference between: git checkout HEAD^ git reset --hard HEAD^
In this case they do exactly the same thing, don't they?
Show 17 quoted lines
> 'git checkout' however checks out something into working directory. > It can be branch, in which turns it sets HEAD to point to it, and > index too. It can be file, in which it gets version of file from > index or (if specified) from given commit. Destination is always > working area (and sometimes something else beside it). > >> >> Is that relevant? No. What is relevant is the final action the user is >> expecting to achieve. >> >> Therefore, the fact that 'git checkout <commitish>' modifies the >> working directory is irrelevant, it's still doing an extra step; >> update HEAD, and that final action is what is important for this >> particular command; it switches to another commitish. > > It is not uncommon for a word to have different meaning depending on > context, or on some auxiliary word used in addition...
We are talking about a command here, not a command that has two slight variations of the same main action, a command that is doing *two* completely unrelated actions depending on the context.
Think about these 3 actions: a) get a path out of a commit in the repository and into the working directory b) switch to another commit, reseting the working directory c) reset current branch to certain commit, and checkout into the working directory
The 3 actions require putting something into the working directory; what makes a) and b) so similar they belong to the same command?
-- Felipe Contreras