私のgitワークフローはリベースを多く使用します。私は常にアップストリームの変更(私が分岐したメインリポジトリ)をフェッチしてからブランチにマージし、リベースして不要な(私にとっては:D)マージコミットとツリー分割を削除します。
このワークフローで私を悩ます1つのことは:
$ git rebase upstream/master
Cannot rebase: You have unstaged changes.
Please commit or stash them.
$ git stash
Saved working directory and index state WIP on cc: abc1234 Merge remote-tracking branch 'upstream/master' into local_branch
HEAD is now at abc1234 Merge remote-tracking branch 'upstream/master' into local_branch
$ git rebase upstream/master
First, rewinding head to replay your work on top of it...
Applying: awesome code change
$ git stash pop
したがって、ここには4つのコマンドがあります。1はリベースに失敗、2はスタッシュ、3はリベース、4はスタッシュポップです。 3以外は何も考えない仕事です。
質問は次のとおりです。自動化の最も推奨される方法は何ですか? git stash/rebase/popを毎回実行するエイリアスですか? rebaseを強制的に隠したり、後で再適用する別のコミットとして扱うgit configがありますか?他に何か?
1つの簡単な答え:git rebase -i --autosquash --autostash <tree-ish>
-i = interactively rebase
https://devdocs.io/git/git-rebase
この意志...
<tree-ish>
からインタラクティブにリベースしますtree-ish
は、commit hashまたはbranch nameまたはtagまたは 任意の識別子 .
git-up と呼ばれる外部ツールを使用できます。これは、すべてのブランチに対して正確に言うことを行います。これは、クリーンな履歴グラフを維持するのにも役立ちます。
私は何年も使用してきましたが、特にあなたがgitの専門家でない場合、かなりうまく機能します。自動リベース機能を追加する場合は、失敗したリベースから適切に回復する方法を知っておく必要があります(続行、中止など)。
シェルを開いて実行します:
Sudo gem install git-up
グローバル設定ファイル(~/.gitconfig
)、および以下を追加します。
[git-up "fetch"]
all = true # up all branches at once, default false
Prune = true # Prune deleted remote branches, default false
[git-up "rebase"]
# recreate merges while rebasing, default: unset
arguments = --preserve-merges
# uncomment the following to show changed commit on rebase
# log-hook = "git --no-pager log --oneline --color --decorate $1..$2"
その他のオプションについては、 公式ドキュメント をご覧ください。
すべてが適切に構成されている場合は、次を実行します。
git up
これは、次を実行することと(ほぼ)同等です。
git stash
git fetch --all
[foreach branch]
git rebase --preserve-merges <branch> <remote>/<branch>
git merge --ff-only <branch>
[end foreach]
git checkout <prev_branch>
git stash pop
フェッチを含む、1つのコマンドでのワークフロー全体:
git pull --rebase --autostash [...]
tjsingleton blogg からの回答
次のコマンドエイリアスを作成します。
git stash && git pull --rebase && git stash pop
update
あなたがアイデアを使用している場合、汚れた作業ディレクトリでプッシュすると、ダイアログが表示され、リベース/マージを選択し、自動的にスタッシュ、リベース/マージ、ポップします。