Git - натисніть поточний ярлик для гілки


363

Чи є ярлик, щоб сказати Git, щоб натиснути поточну гілку відстеження до походження?
Примітка. Я знаю, що можу змінити типову поведінку натискань , але я шукаю спеціальне рішення, яке не змінює поведінку за замовчуванням.

Наприклад, припустимо, я перебуваю на гілці, feature/123-sandbox-testsяку б я використовував

git push origin feature/123-sandbox-tests

що стомлює. Шукаю ярлик, щось подібне

git push origin current

де git знає, що струм є feature/123-sandbox-tests.


Редагувати : Починаючи з версії 2.0, поведінка за замовчуванням git змінилася на більш інтуїтивну поведінку, чого я хотів досягти. Детальніше дивіться у цьому запитанні ТА

Редагувати 2 : відповідь ceztko є найкращою відповіддю, оскільки дозволяє просунути поточну гілку незалежно від налаштувань.

Відповіді:


701

Відповідно до git pushдокументації:

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

Тому я думаю, що вам потрібно git push origin HEAD. Також може бути корисно git push -u origin HEADналаштувати інформацію про відстеження в потоці в локальній гілці, якщо ви ще не натиснули на початок.


11
Я віддаю перевагу цьому над налаштуванням push.default перед простим або поточним, тому що різні машини можуть мати різні налаштування. Ви можете звикнути git pushлише натискати на поточну гілку, але на інших машинах ви можете випадково натиснути всі відповідні гілки.
вісбукі

1
@wisbucky У мене є кілька псевдонімів, в тому числі co, тому, якщо я намагаюся навіть спустити вниз, а потім перевірити код без мого ~/.gitconfigфайлу на цій ВМ, я буду знати це негайно. Це дозволяє мені відчувати себе досить безпечно щодо зміни тиску за замовчуванням на upstream.
Деймон

9
Цікаво, що це не працює з справедливим @, що документально підтверджено як псевдонім HEAD. (напр. git push -u origin @)
void.pointer

196

Ви можете налаштувати git для переходу до поточної гілки за допомогою наступної команди

git config --global push.default current

то просто робити

git push 

це підштовхне код до вашої поточної гілки.


Чи є сенс додавати push = refs/heads/current:refs/for/master/currentдо "віддаленого" розділу в .git / config? Тобто, чи є "поточним" особливим словом тут? Або буде шукати галузь, яку називають "поточною"?
Девід Дорія

6
@DavidDoria "поточний" - це не назва гілки.
Махеш

Найкраще робити git push -u origin feature_branch_nameналаштування вище / за стеженням! Якщо ви використовуєте принаймні віддалений сховище.
Flo

40

Слід звернути увагу на аналогічне запитання у поведінці "git push" за замовчуванням без вказання гілки

В основному це пояснює, як встановити поведінку за замовчуванням, щоб підштовхнути поточну гілку до виконання git push. Напевно, що вам потрібно:

git config --global push.default current

Інші варіанти:

  • нічого : нічого не штовхати
  • відповідність : натисніть на всі відповідні гілки
  • вгору / стеження : натисніть на поточну гілку до того, що вона відстежує
  • струм : натисніть поточну гілку

11

Я використовую такий псевдонім у своєму .bashrc config

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

У команді $gpbвін бере поточну назву гілки та підштовхує її до початку.

Ось інші мої псевдоніми:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'

8

Для чого це варто, остаточний ярлик:

В моєму .bash_profileє alias push="git push origin HEAD", тому кожен раз, коли я ввожу, pushя знаю, що я натискаю на поточну гілку, на якій я перебуваю.


6

Якщо ви використовуєте git 1.7.x, ви можете виконати таку команду, щоб встановити гілку віддаленого відстеження.

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

Тоді ви можете просто використовувати, git pushщоб натиснути всі зміни. Для більш повної відповіді дивіться прийняту відповідь на подібне запитання тут.

Якщо ви хочете лише натиснути поточну гілку за допомогою команди push, тоді ви можете змінити поведінку натискання на вище:

git config --global push.default upstream

Дякую, однак у цьому випадку, чи НЕ ВСІ гілки відстеження не будуть витіснені до походження?
Елад

Я змінив відповідь, будь ласка, дивіться посилання, відповідь там більш повна.
Фарук Сахін

Знову ж таки, проблема полягає в тому, що всі гілки відслідковують гілки висуваються таким чином. Як я писав у своєму запитанні, гілка - це відслідкована гілка, в першу чергу, тому я вважаю, що встановлення гілки вище за течією, як ви запропонували, є зайвим. Або я помиляюся?
Elad

Тоді ви можете налаштувати git для натискання лише поточної гілки, змінивши поведінку git push. git config --global push.default upstreamвстановить поведінку натискання, щоб натиснути лише на поточну гілку.
Фарук Сахін

5

Найпростіший спосіб: запустити git push -u origin feature/123-sandbox-testsодин раз. Це підштовхує гілку так, як ви звикли це робити, а також встановлює інформацію про стеження за версією в локальній конфігурації. Після цього ви можете просто git pushпросунути відслідковувані гілки до їхніх віддалених (-ів) передач.

Ви також можете зробити це в конфігурації самостійно, встановивши branch.<branch name>.mergeім'я віддаленої гілки (у вашому випадку те саме, що і місцеве ім'я) та, необов'язково, branch.<branch name>.remoteім'я віддаленого пристрою, до якого ви хочете натиснути (за замовчуванням на походження). Якщо ви заглянете в конфігурацію, то, швидше за все, вже є один із цих наборів для master, тому ви можете наслідувати цей приклад.

Нарешті, переконайтеся, що ви врахували push.defaultналаштування. Він за замовчуванням відповідає "відповідності", що може мати небажані та несподівані результати. Більшість людей, яких я знаю, вважають «вище за течією» більш інтуїтивним, що штовхає лише поточну гілку.

Детальну інформацію про кожне з цих параметрів можна знайти на ман-сторінці git-config .

По другій думці, перечитуючи ваше запитання, я думаю, ви все це знаєте. Я думаю, що те, що ти насправді шукає, не існує. Як щодо функції bash на зразок (неперевіреної):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}

1

За допомогою відповіді ceztko я написав цю маленьку функцію помічника, щоб полегшити своє життя:

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

Він підштовхує поточну гілку до початку, а також встановлює гілку віддаленого відстеження, якщо вона ще не була налаштована.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.