Ram sobre rieles React Native
Si tengo las siguientes ramas en git
1194-qa-server
master
remotes/origin/1178-authentication
remotes/origin/1194-qa-server
remotes/origin/HEAD -> origin/master
remotes/origin/master
Quiero cambiar a una sucursal usando –solo– el número, incluso si eso requiere llamar a un script. Por ejemplo:
switch_branch 1178
y el script/solución debe hacer lo siguiente
- git branch -a (busca todas las sucursales locales y remotas en mi repositorio)
- filtrar por el parámetro dado (‘1178’ arriba)
- extrae el nombre de la rama que git puede usar
- cambiar a esa sucursal
¿Cuál es la forma recomendada de hacerlo sin tener que realizar todos estos pasos manualmente?
Estoy usando Mac OSX, si eso importa aquí.
actualizar: bash-it (github.com/revans/bash-it) cumple mi propósito
Welcome to Bash It!
Here is a list of commands you can use to get help screens for specific pieces of Bash it:
rails-help list out all aliases you can use with rails.
git-help list out all aliases you can use with git.
todo-help list out all aliases you can use with todo.txt-cli
brew-help list out all aliases you can use with Homebrew
aliases-help generic list of aliases.
plugins-help list out all functions you have installed with bash-it
bash-it-plugins summarize bash-it plugins, and their installation status
reference <function name> detailed help for a specific function
Hay muy pocas ocasiones en las que le gustaría pagar remotes/origin/*
. Existen, pero a los efectos de este atajo, no nos preocupemos por ellos. Esto le dará lo que quiere en OSX:
git config --global alias.sco '!sh -c "git branch -a | grep -v remotes | grep $1 | xargs git checkout"'
A continuación, puede emitir git sco <number>
para pagar una sucursal que incluye <number>
pero excluye “controles remotos”. Tu puedes cambiar sco
para ser lo que quieras. Acabo de elegirlo para “super checkout”.
Por supuesto, esto no funcionará muy bien si tiene más de una rama que coincida <number>
. Sin embargo, debería ser un buen punto de partida.
-
Sirve para el propósito, pero encontré bash-it mejor. github.com/revans/bash-it
– Ram sobre rieles React Native
9 de julio de 2012 a las 19:42
-
Haz una llamada a
head -1
al final y deberías ser bueno incluso con múltiples coincidencias.– DylanYoung
15 de julio de 2020 a las 17:28
DàChún
Aquí está mi solución con pago difuso: agregue el alias a su ~/.gitconfig
por correr
git config --global alias.fc '!f() { git branch -a | grep -m1 -e ${1}.*${2} | sed "s/remotes\/origin\///" | xargs git checkout; }; f'
El comando anterior agregará el alias a su ~/.gitconfig
:
[alias]
# fuzzy checkout branch, e.g: git cb feature 739, will checkout branch feature/PGIA-739-deploy-maximum
fc = "!f() { git branch -a | grep -m1 -e ${1}.*${2} | sed \"s/remotes\\/origin\\///\" | xargs git checkout; }; f"
El alias puede tener 2 parámetros para la coincidencia aproximada, puede usarlo como:
git fc <keyword1> <keyword2>
Encontrará la caja de la sucursal primer partido
Por ejemplo, si desea pagar su sucursal 1178, puede ejecutar:
git fc 1178
el alias fc admite dos parámetros, si desea una coincidencia más precisa, también puede ejecutar:
git fc 1178 auth
También puedes encontrar mis otros fragmentos favoritos aquí
-
¡Esto funciona muy bien, gracias! Sin embargo, hay un pequeño problema. Si desea cambiar a una sucursal que tiene el mismo número (coincidencia) que la sucursal actual, no puede seleccionar ninguna con mensaje. Ejemplo: estoy en
V3F-95
y hay otra sucursalsome-long-Matching-test-V3F-95
. sígit fc 95
entonces se muestraerror: pathspec 'V3F-95' did not match any file(s) known to git
– Arvind K.
4 de febrero a las 6:29
-
Otra cosa extraña sucedió. tengo una sucursal
Development
y lo intentégit fc dev
. El resultado fue,git fc dev
\nortebranch 'develop' set up to track 'origin/develop'.
\norteSwitched to a new branch 'develop'
. Creó una nueva rama llamada desarrollar y cambió a ella. No tengo ninguna sucursal local o remota condevelop
. ¿Alguna idea?– Arvind K.
4 de febrero a las 6:35
-
Por cierto, ¿hay alguna manera de usar el patrón de coincidencia de nombre de rama con otros comandos de git? Por ejemplo yo también estoy harto de hacer
git pull origin Development
,git merge Development
etc. 🙂– Arvind K.
4 de febrero a las 6:47
bxm
Aquí está la solución que se me ocurrió.
[ ${#} -ne 1 ] && { echo -e "Please provide one search string" ; exit 1 ; }
MATCHES=( $(git branch -a --color=never | sed -r 's|^[* ] (remotes/origin/)?||' | sort -u | grep -E "^((feature|bugfix|release|hotfix)/)?([A-Z]+-[1-9][0-9]*-)?${1}") )
case ${#MATCHES[@]} in
( 0 ) echo "No branches matched '${1}'" ; exit 1 ;;
( 1 ) git checkout "${MATCHES[0]}" ; exit $? ;;
esac
echo "Ambiguous search '${1}'; returned ${#MATCHES[@]} matches:"
for ITEM in "${MATCHES[@]}" ; do
echo -e " ${ITEM}"
done
exit 1
lo llamé git-rcheckout
(“r” para regex, a falta de un nombre mejor) y lo colocó en mi camino (es un poco demasiado largo para calzarlo en mi .gitconfig
.)
Intentará hacer coincidir las sucursales locales y remotas (aunque solo verifica las locales) y tolerará (es decir, ignorará para fines de búsqueda) algunos estilos de JIRA, como sucursales que comienzan con prefijos comunes y cosas con estilo como ID de boleto de JIRA.
por ejemplo, escribiendo esto:
git rcheckout this
Debería coincidir con cosas como
this-branch feature/this-branch bugfix/JIRA-123-this-branch JIRA-123-this-branch remotes/origin/this-branch remotes/origin/feature/this-branch remotes/origin/bugfix/JIRA-123-this-branch remotes/origin/JIRA-123-this-branch
Pero las expresiones regulares que he usado son lo suficientemente tolerantes como para que también puedas hacer:
git rcheckout JIRA-123
Acceder:
bugfix/JIRA-123-this-branch JIRA-123-this-branch remotes/origin/bugfix/JIRA-123-this-branch remotes/origin/JIRA-123-this-branch
De forma predeterminada, busca prefijos de rama, pero en realidad puede usar expresiones regulares para hacer cosas más sofisticadas si lo desea, así:
git rcheckout '.*bran'
git rcheckout '.*is-br.*h'
-
Funcionará para los nombres de sucursales grandes que normalmente crea Jira. También apoya la
git flow
paradigma. Excelente.– bvj
27 de febrero de 2018 a las 4:23
Usando bash puedes usar
git checkout 1178[TAB]
😉– KingCrunch
5 de julio de 2012 a las 8:21
Y usando algunos elegante ayudante es solo
gco 1178[TAB]
– Stefan
5 de julio de 2012 a las 8:52
Realmente no funciona para mí. Encontré algunas referencias en la web para el autocompletado de hash, pero eso no es lo que estoy buscando.
– Ram sobre rieles React Native
5 de julio de 2012 a las 10:42
en realidad necesitas instalar git autocompletar para
git checkout 1178[TAB]
trabajar. Más información aquí: apple.stackexchange.com/a/55886– Crogers
19 de abril de 2020 a las 18:46