git lesson please

Richard Laager rlaager at wiktel.com
Wed Dec 13 08:25:21 UTC 2017


On 12/13/2017 12:25 AM, Hal Murray via devel wrote:
> Is there a simple way to do a git pull when I have edits in progress?

Use `git stash`, which (as you put it) is the "better way" to "save them
off to the side".

git stash

git pull

# Choose *one*:
git stash apply
git stash pop

`git stash apply` leaves the stashed state in the stash list. `git stash
pop` deletes it from the stash list, if and only if applying it was
successful.

> Correspondingly, if I commit some changes, then discover a better way, is 
> there a simple way to undo a commit?

See below for some specifics, but I'm going to answer this more
generally first.

`git rebase` allows history editing. This is my typical recipe, which
does an interactive rebase of all changes since upstream HEAD:

git rebase -i origin/master

In there, you can specify what to do with each commit. If you delete one
from the list, it will be deleted from the history. If you re-order
them, the commits will be re-ordered. You can squash them together, stop
for editing, or reword messages.

> I think revert applies another commit 
> that undoes the edit, but that leaves cruft in the log.

You have this correct. You can use rebase to squash them together, if
that makes sense in a particular situation.

If you don't need to fully undo it, just make a new commit and then
squash them together with `git rebase`.

> Is there an 
> option/command for the special case where the commit I want to undo is the 
> last one?

If you want to modify, which is a more common case for me than "undo":
git commit --amend

If you want to blow it away completely AND roll back your working tree:

# DANGEROUS; read the above line carefully:
git reset --hard HEAD^

While I haven't reviewed it, I found the following in a Google search,
and you might find it helpful:
https://sethrobertson.github.io/GitFixUm/fixup.html

-- 
Richard


More information about the devel mailing list