5

ローカル git リポジトリと 1 つのリモート リポジトリがあります。最後にリモートからプルしてから、ローカル リポジトリに 5 つのコミットを行いました。

次に、リモートにプッシュする必要があります。そして、最後の 5 つのコミットを押しつぶす必要があります。

私はそれを行うことができますgit rebase -i HEAD~5

しかし、それは良くありません。ローカル リポジトリで何も変更したくありません。押しつぶされた 1 つのコミットをリモートにプッシュし、変更されていない 5 つのコミットをローカル リポジトリに残したいと考えています。

何か案は?

UPD: ローカル リポジトリに 5 つのコミットがある場合はどうでしょうか。自分のコードを他のユーザーと共有するには、新しいリモート リポジトリを作成する必要があります。この新しいレポのコミットをスカッシュする方法は?

4

2 に答える 2

5

参照用に 5 つのコミットを保持したいだけの場合は、それらのブランチで作業する必要があります。

  1. git branch new-branch master

  2. コミットを行います。これを行ったので、マスターのヘッドをリセットするだけです:

    git reset --hard HEAD~5

  3. git merge --squash master new-branch

  4. git push

masterorigin/masterで 5 つのコミットが押しつぶされてしまいnew-branchます。

于 2012-12-02T11:51:16.080 に答える
1

ブランチに触れずに、新しいブランチを押しつぶすことなく、 Titasanswerからのわずかなバリエーション(新しいレポにプッシュする)master

 git remote add newrepo url://of/your/new/repo
 git checkout -b newbranch master
 git merge --squash master 
 git push -u newrepo newbranch:master

しかし、それはマスターの完全な履歴、+1 (押しつぶされた) コミットを新しいレポにプッシュします。

ブランチの新しい履歴が必要な場合は、5 つの新しいコミットの後のレポを使用すると、次の操作が簡単になります。

  • レポをローカルにクローンし、
  • .gitそのローカル クローンの を削除し、
  • git init.(つまり、既存のすべてのファイルから新しいローカル git リポジトリを再作成します)、
  • すべてを追加して 1 つのコミットを行い、
  • リモートを(新しいリモートレポに)追加し、
  • 新しいローカル リポジトリの 1 つのコミットをプッシュします。
于 2012-12-02T12:33:38.413 に答える