Created
May 19, 2012 04:48
-
-
Save wearhere/2729195 to your computer and use it in GitHub Desktop.
Checkout previous Git branch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
## Checks out the branch with the name recorded in the .PREVIOUS_BRANCH file | |
## in the working directory. To use this script, you should be using the | |
## post-checkout hook that creates such a file. | |
if [ ! -f ./.PREVIOUS_BRANCH ] | |
then | |
echo "No previous branch has been recorded. You're probably not using the post-checkout hook." | |
exit 1 | |
fi | |
previous_branch=`cat ./.PREVIOUS_BRANCH` | |
git checkout ${previous_branch} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
## When the branch changes, record the name of the previously checked-out branch | |
## in a file called .PREVIOUS_BRANCH in the working directory. | |
## To use this script, place it in your .git/hooks directory, with the name "post-checkout". | |
## You should probably edit your .git/info/exclude file to ignore .PREVIOUS_BRANCH, too. | |
previous_ref=$1 | |
heads_matching_previous_ref=`grep -r $previous_ref .git/refs/heads/*` | |
# http://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch#comment9751841_1593487 | |
current_branch=`git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3` | |
# the previous branch is the branch whose HEAD matches the previous ref, | |
# which is not the current branch (so that we ignore a newly forked & checked out branch) | |
# we assume that the user won't have 3 or more branches with the same HEAD | |
for head in $heads_matching_previous_ref | |
do | |
# heads are of the form .git/refs/heads/<branch>:<SHA> | |
branch=`echo ${head} | sed 's/\.git\/refs\/heads\/\(.*\)\:.*/\1/'` | |
if [ ${branch} != ${current_branch} ] | |
then | |
echo ${branch} > ./.PREVIOUS_BRANCH | |
break | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment