コミットをプッシュしたいときはいつでも(git commit -m "message"
、git Push Origin <branch>
)、プルします(git pull Origin <branch>
)。
プッシュを実行する前にgitにプルを実行させる方法はありますか? (同じブランチ上)
これを行うGitの方法は、 Gitフックをカスタマイズする を使用することです。
あなたの場合、あなたはあなたのリポジトリの.git/hooks
ディレクトリに行き、あなたが選んだスクリプトであるpre-Push
という名前のファイルを追加する必要があるでしょう。 (この例ではbash)
#!/bin/bash
echo "pulling ..."
git pull
このスクリプトは、git Push
を実行したとき、実際のプッシュの前に呼び出されます。
明らかに、これは非常に単純なサンプルですが、あなたがその考えを理解してくれることを願っています。このディレクトリにはすでにサンプルがあります。それでも不明な点がある場合はコメントしてください。
OPのコメントに基づくと、最近のコミットとリモートでのコミットとの間のマージコミットを回避しようとしているようです。これは通常、ローカルとリモートの履歴が分岐したときにgit pull
によって生成されます。
これを行う明示的な方法は、最初にフェッチしてリベースし、最後にプッシュすることです。
git fetch
git rebase Origin/master
git Push
これを行う2番目の方法は、--rebase
を呼び出すときにgit pull
を渡すことです。
git pull --rebase
最後に、構成を設定することで、これをgit pull
のデフォルトの動作にすることができます。
git config --global pull.rebase true
実際には、プッシュする前にプルする必要はありません。ローカルにないリモート側にコミットがある場合、gitPushは次のメッセージメッセージで失敗します。
Pushing to git@yourserver:<user>/<repo>.git
To git@yourserver:<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スクリプトで任意のコマンドシーケンスを組み合わせることができます。
git-pullpush
(拡張子なし、実行可能ファイル、$PATH
によって参照されるフォルダーに保存されます)
これは通常のbashスクリプトになります(msys bashによって解釈されるため、Windowsでも機能します)
#!/bin/bash
# you can add any command you want
git pull && git Push
そして、あなたはそれをgit pullpush
(エイリアスのように)で呼ぶでしょう
command2
が成功した場合にのみcommand1
を実行する場合(基本的に0)を返す場合は、ダブルアンパサンド記号&&
を使用して実行します。
command1 && command2
そして、command2
が成功した後にcommand1
を実行するにはまたは失敗した場合でも、セミコロン;
を使用して実行します。
command1 ; command2
前者をgit pull && git Push
に使用し、後者をgit pull ; date
に使用しました