Git: muestra el nombre de la twig actualmente rastreado sin el nombre remoto en él

Estoy trabajando en un git alias para ejecutar un command git push --force -like en un repository donde no se puede forzar la fuerza, pero puede eliminar twigs remotas. Entonces, ¿qué tiene estos dos pasos?

  1. eliminar la twig remota
  2. empujar la twig local contra el control remoto

El script debe funcionar en el caso de la sucursal local y la sucursal remota tiene diferentes nombres. Solo hay un control remoto (origen) por lo que puede ser codificado. El alias debe ejecutarse solo en un shell bash.

Me estoy quedando atrapado en get el nombre correcto de la twig ascendente. Sé que puedo get la twig rastreada en sentido ascendente en git con el command:

git rev-parse --abbrev-ref --symbolic-full-name @{upstream}

Sin embargo, eso devuelve el nombre de la twig con el formatting <remote_name>/<branch_name> por ejemplo: origin / my_working_branch

y haría que la inserción fallara ya que emitiría los siguientes commands:

 # this fails as the branch origin/my_working_branch does not exist git push origin :origin/my_working_branch # this will create a branch named 'origin/my_working_branch' in the remote, which is not what I want git push origin my_working_branch:origin/my_working_branch 

¿Hay alguna manera de hacer que git rev-parse emita el nombre de la twig sin el control remoto / parte?

¿Hay alguna forma de hacer que git rev-parse emita el nombre de la twig sin el control remoto / parte?

No, pero no es necesario. Desea saber cuál es el nombre de la sucursal en la parte superior , y esa es la segunda mitad de las dos partes con las que trabaja git rev-parse .

Es decir, para la twig B , la cadena ascendente se establece en dos partes: branch. B .remote branch. B .remote es el nombre del control remoto y de la branch. B .merge branch. B .merge es el nombre de la twig en el control remoto. Entonces, si my_working_branch tiene origin/badbranch como upstream, y todo lo demás es como es normalmente, entonces:

 git config --get branch.my_working_branch.remote 

será el origin salida, y:

 git config --get branch.my_working_branch.merge 

generará la cadena que desee: refs/heads/badbranch .

Tenga en count que uno o ambos pueden ser desactivados , en cuyo caso no hay un flujo ascendente definido; y si branch. B .remote branch. B .remote es un punto literal . personaje, el upstream es tu propio repository.

(Es una buena idea usar el formatting totalmente calificado de refs/heads/ branch al eliminar y volver a crear una bifurcación. Además, asegúrese de que quienquiera que controle el upstream no se queje de que está eludiendo las disposiciones anti-force. -))