Каждый раз, когда я хочу нажать мои коммиты (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