2

git fetch -p以前は、いくつかの git 配管コマンド¹ を指定してブランチを自動的に[gone]削除し、パターンを照合してから一致したブランチを削除していました。

私が使用しているリポジトリの中には、プル リクエストのスカッシュを強制するものがあるため、マージされたコミットがローカルで作成されることはなく、新しいコミットのコンテンツとローカル ブランチのコンテンツをリンクする方法がありません。

しばらく前に に切り替えましたがpush.default current、この機能はpush.default upstreamまたはよりも優れていsimpleます。

数日後、すべてのブランチが削除されていないことに気付きました。これは、プッシュ時にアップストリームが「推測」されますが、決して設定されないという事実に由来します。

ブランチのアップストリームを (--set-upstream-to を介して) 手動で設定すると、トリム スクリプトが再び機能することがわかります。しかし、それはcurrentに設定された push.default を使用する目的に反します。

$ git switch -c my-branch
Switched to a new branch 'my-branch'
$ git push 
Total 0 (delta 0), reused 0 (delta 0)
remote: ...
$ git branch -vv
  main      3b3a404 [origin/main] Merge branch 'test-push' into 'main'
* my-branch 3b3a404 Merge branch 'test-push' into 'main'
$ git push -u origin my-branch 
Branch 'my-branch' set up to track remote branch 'my-branch' from 'origin'.
Everything up-to-date
$ git branch -vv
  main      3b3a404 [origin/main] Merge branch 'test-push' into 'main'
* my-branch 3b3a404 [origin/my-branch] Merge branch 'test-push' into 'main'
$ git push -d origin my-branch # this is done automatically after merging
$ git fetch -p
...
 - [deleted]         (none)     -> origin/my-branch
$ git branch -vv
  main      3b3a404 [origin/main] Merge branch 'test-push' into 'main'
* my-branch 3b3a404 [origin/my-branch: gone] Merge branch 'test-push' into 'main'
                                       ^... this is what helps me automatically trimming merged branches

実際に入力せずに、そのアップストリーム設定をプッシュ先ブランチに自動化する方法はありますか?

実際に pre-push フックをプラグインするテストを行いましたが、ブランチが存在しない場合、set-upstream は機能しません。プッシュ後のフックは存在しません。

実際、私の最終的な目標は、マージされて押しつぶされたブランチを削除することですが、それを確認するためにリモートがなくなったかどうかを確認するより良い候補はありません。私は歴史の書き換えの保証を持っていないので

1:git for-each-ref --format '%(upstream:track) %(refname)' refs/heads | awk ' $1 == "[gone]" { sub("refs/heads/", "", $2) ; print $2 }'

4

1 に答える 1

2

yourpush.defaultが に設定されている場合currentgit push -u単独で ( なしで... origin my-branch) リモート ブランチが作成され、ローカル ブランチがそのリモート ブランチを追跡するように設定されます


追記: %(refname:short)(in git for-each-ref --format) はあなたが慣れ親しんでいるブランチ名を表示します

于 2021-12-09T22:01:36.737 に答える