Как заставить тянуть до толчка

Каждый раз, когда я хочу нажать мои коммиты (git commit -m "message", git push origin <branch>), я делаю pull (git pull origin <branch>).
Есть ли способ сделать git сделать натяжение перед выполнением моего нажатия? (на той же ветке)

Ответ 1

Git способ сделать это с помощью настроить Git hooks.

В вашем случае вам нужно будет перейти в каталог .git/hooks в вашем репозитории и добавить файл с именем pre-push, который является script по вашему выбору, например. (bash в этом примере)

#!/bin/bash

echo "pulling ..."
git pull

Этот script будет вызываться, когда вы выполняете git push и перед фактическим нажатием.

Очевидно, это всего лишь очень наивный образец, но я надеюсь, что вы поняли эту идею. В этом каталоге уже есть образцы. Прокомментируйте, если что-то еще неясно.

Ответ 2

Если вы хотите, чтобы command2 запускался тогда и только тогда, когда command1 преуспевает (в основном возвращает 0), запустите с помощью знака с двойным амперсандом &&, между ним:

command1 && command2 

И, чтобы запустить command2 после command1 успешно или даже если сбой, запустите с помощью точки с запятой ;:

command1 ; command2 

Я использовал бывший для git pull && git push, а затем один для git pull ; date

Ответ 3

Вам действительно не нужно тянуть, прежде чем нажимать: если на удаленной стороне есть коммит, у вас нет локального, нажатие git с сообщением об ошибке:

Pushing to [email protected]:<user>/<repo>.git
To [email protected]:<user>/<repo>.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/BigMeanCat/CMDA'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.

hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Если у вас есть контроль над удаленным сервером, вы можете установить там:

git config --system receive.denyNonFastForwards true

В более общем плане вы можете легко определить псевдоним, объединяющий обе команды:

git config alias.pullpush '!git pull && git push'

Если сбой невозможен, нажатие не будет выполнено.


Наконец, вы можете комбинировать любую последовательность команд в bash script с именем

git-pullpush

(без расширения, исполняемого файла, сохраненного в папке, на которую ссылается $PATH)

Это будет обычный bash script (который работает даже в Windows, поскольку он будет интерпретироваться с помощью msys bash)

#!/bin/bash
# you can add any command you want
git pull && git push

И вы бы назвали его с помощью git pullpush (например, псевдонима)

Ответ 4

На основе комментариев OP они, похоже, пытаются избежать фиксации слияния между их недавними коммитами и коммитами на удаленном компьютере, который обычно генерируется git pull, когда локальная и удаленная истории расходятся.

Явный способ сделать это - сначала выбрать и переустановить, и, наконец, нажать.

git fetch
git rebase origin/master
git push

Второй способ сделать это - передать --rebase при вызове git pull.

git pull --rebase

Наконец, можно сделать это по умолчанию git pull, установив конфигурацию.

git config --global pull.rebase true