は、私が開発から機能ブランチf
を作成したとき、私はこのようなコミットツリーでは、次のローカルリポジトリを考えてみましょう変更:防止ユーザーは
master --> a
\
\
develop c
\
\
feature f
今後のいつかの新機能がありますc
を開発するためにマージされてコミット私のツリーは次のようになります。
master --> a
\
\
develop c --> d --> e
\
\
feature f
は、今私は私が開発から最新の変更を引っ張って前にコミットしないようにしたいです。私が試したものから
master --> a
\
\
develop c --> d --> e
\
\
feature f
、一つの方法は、f
に変更をプッシュして、(今新しい変更を持っている)e
を開発するf
をマージしようとすることです。これを行うと明らかに、gitからのエラーメッセージは、f
の前にあります。これはpost-hook
で行うことができます。しかし、私はgit pre-hook
でそれを行うことはできますか?
もしそうなら、それを行う方法とそうでない場合は、他のやり方をお勧めします。可能であれば、コマンドが何をしているのかを説明してください(私はgitの初心者です)。
ユーザがこれを行おうとした場合に、カスタムメッセージを表示する必要があります。
ありがとうございます!
更新: 私はこれ(このスクリプトは、プリコミットフックで呼び出されます)どのよう
tomato.sh
#!/bin/bash
WORKING_GIT_DIR=$1
cd $WORKING_GIT_DIR
# switch to BRANCH_TO_MERGE
BRANCH_TO_MERGE=$2
git checkout $BRANCH_TO_MERGE
PARENT_BRANCH=$(git show-branch | grep '*' | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -n1 | sed 's/.*\[\(.*\)\].*/\1/' | sed 's/[\^~].*//')
echo $PARENT_BRANCH
# in memory merging of feature branch and parent and look for possible conflicts
git merge-tree `git merge-base FETCH_HEAD $PARENT_BRANCH` FETCH_HEAD $PARENT_BRANCH
のように見えるソリューションに取り組んでいます実行する
sh +x tomato.sh (PATH TO WORKING_GIT_DIR) (BRANCH_TO_MERGE)
スクリプトがどのように動作するか
親ブランチを見つけようとします(詳細は[ここ] [2]参照)。 は、次に使用する3ウェイ・マージを実行します。
git merge-tree <base> <branch1> <branch2>
ベース - >現在のFETCH_HEAD - 現在の親ブランチ
支社の>現在のFETCH_HEAD &親の間で最も共通の祖先を見つける/最寄りの親ブランチを
BRANCH2 - これは、MEMに与える
現在の親枝の>親/最寄りの親ブランチ実際にインデックスを変更することなく、リモートブランチとローカルブランチのoryマージ
誰かがこのスクリプトを改善した場合は、ご意見ください。
ありがとうございます!
ブランチで 'git merge feature'を実行し、マージ競合を解決してからコミットします。 – Kelvin
ユーザーが*ローカル*コミットを作成しないようにしたいですか?彼らがコミットするようにして、便利なときにマージ/リベースするだけです。 –
@Oliverこれは良い質問だと思います。それが答えられた場合、pre-commitフックは、あなたの基礎が既に変更されていることを知らせることなく開発(=コミット)することを防ぎます。 「参照はすでに変更されました。マージを先に実行しますか?[y/n]」のような警告が表示されます。一方で、参照が何であるかについての追加情報を提供する必要があります。 – Christoph