10

まず、これは 1 つではなくすべてのブランチに適用されるため、これは異なります。(私が見つけたすべてのものは、一度に 1 つのブランチに対してのみこれを指定します)

私は約20〜30のブランチを持つレポに取り組んでいます(私が知っている長い話の悪い習慣です)

とにかく、git bfg クリーナーを使用していくつかの古いコミットを削除していました。それを使用した後は、コードを削除して再クローンするか、すべてのブランチをリセットする必要があります。

を使用してブランチを設定する方法を知っています

git fetch origin
git reset --hard origin/master

しかし、1 つのコマンドですべてのブランチをリセットする方法はありますか、それとも一度に 1 つのブランチで行う必要がありますか?

コピーや書き換えを行いたくないので、多くのローカル ファイルを無視しています。(IDE ファイル、コンピューター構成ファイルなど)

4

5 に答える 5

7

まず、これは 1 つではなくすべてのブランチに適用されるため、これは異なります。

ブランチをループして、各ブランチで必要なことを実行するスクリプトを使用できます。

# Loop on all the desired branches
for ref in $(git branch -a)
do
   # ... DO ANYTHING YOU NEED HERE
   # You have the $ref which stores the branch name
   # ex: remotes/origin/master
done

もっと簡単な解決策はありますか?

はい、プロジェクトを再度複製するだけで、オリジンと同じコンテンツが得られます。
これは、ブランチごとに手動で行うこととまったく同じです。


ノート:

次のコマンドを使用して、すべてのデータを一度に取得できます。

# Fetch all remotes, branches and remove deledted content
git fetch --all --prune
于 2016-03-15T18:39:29.377 に答える
5

すべてのローカル ブランチを削除して、リモート ブランチが再チェックアウトされるたびに同期されるようにしないのはなぜですか?

 # BE CAREFUL!!!
 # THIS COMMAND WIPES OUT ALL LOCAL BRANCHES
 ​git branch | xargs git branch -D

xargs は、stdin のすべての行に対して提供されたコマンドを実行します。この場合、元の "git branch" コマンドのすべての行に対して "git branch -D" です。

「git branch -D」コマンドは現在のブランチでは失敗しますが、他のすべてのブランチは消去されます。

または、「git branch -f」を実行してすべてのローカル ブランチをリモート コピーに強制設定する「xargs」を使用して何かを調理することもできますが、上記の「git branch -D」アプローチが最も単純であり、最も結果に関する限り単純明快であり、潜在的な危険が懸念されます。

于 2016-03-15T18:43:42.770 に答える
1

次のワンライナーを使用できます(他の回答に基づいて):

git branch --format='%(refname:short)' | xargs -i sh -c "git checkout {} && git reset --hard origin/{}"

  • --format='%(refname:short)'*煩わしさを取り除きますgit branch
  • -i{}ブランチのプレースホルダーとして使用できるようにする

警告:私はそのコマンドをあまり使用しなかったため、完全に安全ではない可能性があります。より安全にしたい場合は、その回答を参照してください。

于 2019-11-26T16:23:08.013 に答える