On Sunday, 6 January 2013 at 22:45:27 UTC, Andrei Alexandrescu
wrote:
I do now after having read about it at the end of several
google searches.
I found the git documentation to be an excellent resource once
you're familiar with the basic concept of how git works. For
that, I found this quite insightful:
http://eagain.net/articles/git-for-computer-scientists/
I agree it is important to be fluent with git. I'm an okay user
but currently unfit for an admin. Probably Walter is at a
similar stage. I'm doing my best to improve my knowledge in the
limited time I have, and part of it is discussing git here. So
I hope you'll understand why I find it contradictory to be
reprimanded for doing so with the reproach that I should be
doing exactly what I'm doing.
Sorry, your post came across to me as you advocating that
everyone used a git command without having understood its exact
function.
Yes, that was exactly my intention.
But, why? If both histories contained conflicting changes, Git
will throw only some away. In some cases, this might result in a
broken codebase (the result might even compile, but git might've
thrown away some initialization code (only), and you may not find
out until it's too late).
I get these tidbits of commands - git idioms - all the time,
and I forget them because I don't use them frequently. I don't
see why it's a crime to want to define some macros for such
idioms instead of essentially putting that in a text file that
I'd be perusing now and then.
I just don't think it's that simple. The outcome of any command
can be affected by a number of factors, such as:
- Do you have any unstaged changes? Do you want to keep or
discard them?
- Do you have any staged but uncommitted changes? (ditto)
- Are there any untracked files that may conflict with the
operation? (ditto)
- Are there any local-only commits? (ditto)
- Which branch are you on?
- Does the branch track a remote-tracking branch? Is it tracking
the intended one?
- How is the behavior of the commands set up in the user's
.gitconfig?
So, the question is not as much "How do I get X done?", as it is
"How do I get to X from Y?"
For example, the commands I posted will only work correctly if
the current checked-out branch (i.e., HEAD) is "master",
otherwise it'll move some other branch to match the remote's
master. A hard reset throws away local changes - someone running
such a macro found in a repository's .gitconfig may result in
accidental loss of work.
FWIW, I work with git daily, and haven't found the need to set up
macros such as you describe. I use a "gg" alias to launch git gui
for interactive staging and reviewing, and the "git pullrequest"
script I posted here earlier.
That's pretty much what I wanted but was unable to find easily
by searching the net.
You could always ask on IRC ;)