shared gitconfig

Vladimir Panteleev vladimir at thecybershadow.net
Mon Jan 7 22:56:47 PST 2013


On Sunday, 6 January 2013 at 19:50:47 UTC, Andrei Alexandrescu 
wrote:
> For example, I tried today to get the latest and greatest 
> phobos into my repo, and got a bunch of conflicts. I searched a 
> while on the net to figure what the command for "just get the 
> latest remote into my local copy", which is entirely possible 
> but not obvious and not easy to find.

#!/bin/bash

# Add untracked files to the index, so they're stashed and 
deleted.
# This gives us a cleaner directory, and avoids possible 
collisions with files that are currently untracked, but are 
tracked in master.
git add --all .

# Saves any changes in the working tree or index, if any, as a 
stash.
git stash save "Automatic save before switching to latest master"

# Now that the working tree is clean, switch to whatever the 
"master" branch is currently.
git checkout master

# Reset the master branch to point to the remote's tracking 
branch.
# This allows the merge implied by "git pull" to be a 
fast-forward.
git reset --hard origin/master

# Download new objects, update tracking branch, fast-forward 
current branch to tracking branch.
git pull

# End

This script assumes that the branch you want is "master", and 
that the remote is called "origin".

Do not invoke the script directly. Rather, create an alias in 
your .gitconfig which launches the script. This will allow it to 
work correctly even from a subdirectory in the project.

Instructions to recover data from accidental usage of this script:

To find what branch (or commit, with detached HEAD) you were on 
before the switch to master, check the output of `git reflog 
HEAD`. It should look something like this:

eb5121f HEAD@{0}: pull: Fast-forward
8e7ed2b HEAD@{1}: reset: moving to origin/master
d49acd5 HEAD@{2}: checkout: moving from foo to master
ecdc09c HEAD@{3}: ...
...

The commit you were on should be below the line the description 
of which starts with "checkout:".

Uncommitted data in your index or working tree will be in the git 
stash. Use `git stash apply` to apply the patch to the current 
working tree.

The script could be improved to be a little more efficient (e.g. 
avoid checking out the old master), or less noisy or reliant on 
the environment (e.g. detecting the name of the remote).


More information about the Digitalmars-d mailing list