私は小さなコミットがたくさんある単純なプロジェクトを持っています。私はそれらのいくつかを取り除きたいと思います。私はこれを今いくつかのテストプロジェクトでテストしています。私はリモートのリポジトリをシミュレートするフォルダとそれに接続された2つの他のフォルダ、test1
とtest2
を持っています。私は何をした前に、これは、リモートとローカルのリポジトリの状態です:トップコミットを削除すると、他のローカルリポジトリに問題が発生します
* 0000002C (HEAD -> master, origin/master, origin/HEAD) Small commmit 12
* 0000002B Small commmit 11
* 0000002A Small commmit 10
* 00000029 Small commmit 09
* 00000028 Small commmit 08
* 00000027 Small commmit 07
* 00000026 Small commmit 06
* 00000020 Big commmit 02
* 00000015 Small commmit 05
* 00000014 Small commmit 04
* 00000013 Small commmit 03
* 00000012 Small commmit 02
* 00000011 Small commmit 01
* 00000010 Big commit 01
私は最初の大きなものまでコミット小型のカップルを取り除くためにgit reset --mixed
を実行します。
git checkout master
git reset --mixed 00000020
git add .
git commit -m "New starting"
git push --force origin master
すべてはokです。押圧力後、リモートリポジトリが更新されていないと私はもはやすべてのそれらの小さなコミットしていされています。他のフォルダで
* 0000002D (HEAD -> master, origin/master, origin/HEAD) New starting
* 00000020 Big commmit 02
* 00000015 Small commmit 05
* 00000014 Small commmit 04
* 00000013 Small commmit 03
* 00000012 Small commmit 02
* 00000011 Small commmit 01
* 00000010 Big commit 01
を、私は更新のために取り出され、これはログです:
* 0000002D (origin/master, origin/HEAD) New starting
| * 0000002C (HEAD -> master) Small commmit 12
| * 0000002B Small commmit 11
| * 0000002A Small commmit 10
| * 00000029 Small commmit 09
| * 00000028 Small commmit 08
| * 00000027 Small commmit 07
| * 00000026 Small commmit 06
|/
* 00000020 Big commmit 02
* 00000015 Small commmit 05
* 00000014 Small commmit 04
* 00000013 Small commmit 03
* 00000012 Small commmit 02
* 00000011 Small commmit 01
* 00000010 Big commit 01
I進める方法がわからない。 0000002Dコミットorigin/master
は、私が最も更新したい他のフォルダと、2つの異なるブランチにあるローカルマスタからコミットしています。このローカルリポジトリを最初のフォルダと同じ状態にするために今何をする必要があると思いますか?私はgit rebase
を試して失敗しました。 git merge
は新しいコミットを作成し、ローカルmaster
とorigin/master
をマージしますが、これはもちろん解決策になります。
ありがとうございました。
git fetch
git checkout -B master origin/master
これはあなたのローカルバージョンを強制的にリセットされます:あなたはあなたの第二のリポジトリは、あなたの最初のリポジトリにまだ入っていないすべての変更を持っている2番目のリポジトリでこれを実行していないことを確信している場合
これは、強制的に押してはいけない理由です。あなたの元の変更を既に引っ張ってしまった人々は、基本的に地獄のように混乱します –
私はそれを実現しました。私は何が起こるかを見るためにこのテストを準備しました。私はライブプロジェクトでこれをやっていないことを嬉しく思っています:p – Celdor
これは新しい開発のために別々のブランチを作成する必要があります。複数のチームメンバーが作業します。あなたが個人的に地元で働いている「小さな変化」を保ち、他の人の助けが必要な場合や完了した場合にのみプッシュすることもよいアイデアです。あなたの心のコンテンツのローカルな変更を書き換えることができるからです。コミットが必要なやりかたの後にプッシュします(または、共有ブランチにマージ/リベースするだけです)。 – LightCC