diff --git a/plugins/git-checkout-interactive/README.md b/plugins/git-checkout-interactive/README.md
new file mode 100644
index 000000000..827ec6e2c
--- /dev/null
+++ b/plugins/git-checkout-interactive/README.md
@@ -0,0 +1,15 @@
+# lol
+
+This plugin adds a command that lets you interactively switch between branches.
+
+To use it, add `git-checkout-interactive` to the plugins array in your `.zshrc` file:
+
+```zsh
+plugins=(... git-checkout-interactive)
+```
+
+## Usage Examples
+
+```sh
+gci
+```
diff --git a/plugins/git-checkout-interactive/git-checkout-interactive.plugin.zsh b/plugins/git-checkout-interactive/git-checkout-interactive.plugin.zsh
new file mode 100644
index 000000000..58ff6bb26
--- /dev/null
+++ b/plugins/git-checkout-interactive/git-checkout-interactive.plugin.zsh
@@ -0,0 +1,57 @@
+#######################################
+#       git checkout interactive      #
+#######################################
+
+function git-checkout-interactive() {
+  local ITEMS_TO_SHOW=10
+  # Get all branches sorted by committer date, along with their last commit hash
+  local branches
+  branches=$(git for-each-ref --count="$ITEMS_TO_SHOW" --sort=-committerdate --format='%(refname:short) %(objectname:short)' refs/heads/)
+
+  # Parse branches
+  local branch_list=()
+  local current_branch
+  current_branch=$(git rev-parse --abbrev-ref HEAD)
+  if [[ "$current_branch" == "" ]]; then
+    return 0
+  fi
+  while read -r branch hash; do
+    if [[ "$branch" == "$current_branch" ]]; then
+      echo "On branch $branch \n"
+    else
+      branch_list+=("$branch ($hash)")
+    fi
+  done <<< "$branches"
+
+  if (( ${#branch_list} == 0 )); then
+    echo "No other branches available."
+    return 0
+  else
+    echo "Select a branch to switch to:\n"
+  fi
+
+  # Display menu
+  local i=1
+  for branch in "${branch_list[@]}"; do
+    echo "($i) $branch"
+    ((i++))
+  done
+  echo -n "\nPlease enter your choice: "
+  
+  # Handle user input
+  while :; do
+    local choice
+    read -r choice
+    if (( choice > 0 && choice <= ${#branch_list[@]} )); then
+      local selected_branch="${branch_list[$((choice))]}"
+      local target_branch="${selected_branch//->}"
+      target_branch="${target_branch%% *}"
+      git checkout "$target_branch"
+      break
+    else
+      break
+    fi
+  done
+}
+
+alias gci="git-checkout-interactive || return 0"