aboutsummaryrefslogtreecommitdiff
path: root/git-submodule-checkout-branch
diff options
context:
space:
mode:
Diffstat (limited to 'git-submodule-checkout-branch')
-rwxr-xr-xgit-submodule-checkout-branch33
1 files changed, 33 insertions, 0 deletions
diff --git a/git-submodule-checkout-branch b/git-submodule-checkout-branch
new file mode 100755
index 0000000..6613bf4
--- /dev/null
+++ b/git-submodule-checkout-branch
@@ -0,0 +1,33 @@
+#!/bin/bash
+#
+# Checkout branche a submodule.
+#
+
+# Parameters
+BASENAME="`basename $0`"
+
+# Checkout the branch containing a commit
+function checkout_branch {
+ # Check if we are in a detached HEAD
+ if git branch | grep -q '* (HEAD detached'; then
+ # Determine the commit we're in
+ local commit="`git log -n 1 | head -1 | cut -d ' ' -f 2`"
+
+ # Get the first remote branch that contains our commit
+ #
+ # In the future some criteria might be stablished to determine how to decide
+ # if the comment is present in more than one branch. Which one to prioritize?
+ # A topic branch in the form of "feature/"? The "develop" branch?
+ local branch="`git branch -r --contains $commit 2> /dev/null | grep -v 'HEAD' | head -1 | sed -e 's|^[^/]*/||'`"
+
+ # Checkout to the given commit
+ if [ ! -z "$branch" ]; then
+ git checkout $branch
+ else
+ echo "$BASENAME: no such branch containing dangling commit $commit"
+ fi
+ fi
+}
+
+# Dispatch
+checkout_branch