gitの最初のコミットを削除する方法に興味があります。
何かをコミットする前のリビジョンは何ですか?このリビジョンには名前またはタグがありますか?
git rebase -i --root
。:詳細については、以下のSOの答えを参照してくださいstackoverflow.com/questions/2246208/...
git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
gitの最初のコミットを削除する方法に興味があります。
何かをコミットする前のリビジョンは何ですか?このリビジョンには名前またはタグがありますか?
git rebase -i --root
。:詳細については、以下のSOの答えを参照してくださいstackoverflow.com/questions/2246208/...
git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
回答:
私にとって、最も安全な方法は update-ref
次のコマンド:
git update-ref -d HEAD
名前付き参照を削除します HEAD
ので、現在のブランチのすべてのコミットがリセットされます(ソフトで作業が失われることはありません)。。
最初のコミットを2番目のコミットとマージしたい場合は、次のrebase
コマンドを使用できます。
git rebase -i --root
最後の方法は、孤立したブランチ、つまり同じ内容でコミット履歴のないブランチを作成し、その上に新しいコンテンツをコミットすることです。
git checkout --orphan <new-branch-name>
すべてのコミットは親コミットを参照しているため、最初のコミットの前には何もありません。これは最初のコミットを特別なもの(孤立したコミット)にするため、以前の「状態」を参照する方法はありません。
したがって、コミットを修正する場合は、次のように簡単にできますgit commit --amend
。これにより、別のコミットを作成せずにコミットが変更されます。
最初からやり直したい場合は、.git
リポジトリを削除し、別のリポジトリを作成しますgit init
--amend
、最初に正しく構成されていなかった場合、作成者は適切に更新されません。それが私が必要とするものなので、私は受け入れられた答えを使用してから、代わりに新しいコミットを実行しました。
# Check out to a temporary branch:
git checkout --orphan TEMP_BRANCH
# Add all the files:
git add -A
# Commit the changes:
git commit -am "Initial commit"
# Delete the old branch:
git branch -D master
# Rename the temporary branch to master:
git branch -m master
# Finally, force update to our repository:
git push -f origin master
最初のコミットを編集したいだけかもしれません(gitリポジトリには常に最初のコミットがあるため)。git commit --amend --reset-author
通常の代わりに使用することを検討してくださいgit commit --amend
。
私はそれらが決して起こらなかったように、リポジトリからすべてのgitコミットを取り消す方法を探していました。
リベースはある程度まで機能します。ただし、最初の(年代順で最も古いgit commit)には親がないため、常に問題が発生し、エラーが発生します。
これらの答えのどれも私のためにそれをかなり解決しませんでした。しかし、多くの検索と試行錯誤の結果、これは機能することがわかりました。
git update-ref -d HEAD
git push origin master -f
これがお役に立てば幸いです。すてきな一日を。
あなたができる別の方法は:
git checkout dev
git branch -D master
git checkout --orphan master
もちろん、これはすべてユースケースに依存しますが、ブランチが複数ある場合、.git
ディレクトリを削除しても意味がありません。
他のブランチを保持したいが、たとえばmaster
他のブランチに共通の履歴なしでブランチを新しく開始する場合、これを実現する安全な方法の1つは、新しいリポジトリを作成し、その内容を古いリポジトリにプッシュすることです。
cd ..
git init newrepo
cd newrepo
# make some initial commits
git push ../oldrepo master:newmaster
これによりnewmaster
、他のどのブランチとも共通ではない履歴を持つ古いリポジトリにブランチが作成されます。もちろん、あなただけ上書きすることができmaster
て、同様git push -f
。
すべてのブランチとすべての既存のコンテンツを破棄したい場合は、単に実行します
rm -rf .git/
git rebase --root
はおそらくOPが望んだものですが、この回答に2つの賛成票があることを考慮して、誰かがまだ関連があるとわかった場合に備えて、私はそれを削除しないようにします。
コミットしたがプッシュしなかった場合は、.gitディレクトリを削除して、git init
もう一度...
質問に対する答えは、次のいずれかによって異なります。
(他のブランチをそのままにして)ブランチで最初のAND ONLYコミットを削除するか、または
いくつかのブランチで最初のコミットを削除し、その後、後続のコミット(および他のブランチ)を「そのままにする」必要があります。
これらの2番目は比較的単純です。基本的にルートにリベースする必要があります-ここでの答えのほとんどはこれを行う方法についてです。
2番目の処理(最初のブランチを削除して、他のブランチはそのままにして、ブランチからのみコミットする)を行うのは、より困難です。または、少なくとも、変更をGitHubまたはBitbucketに反映させる場合は特に困難です。(私が知る限り)コミットなしでブランチをプッシュまたは強制プッシュする方法はGitにはまったくありません。また、GitHubやBitbucketのいずれにもコミットされていない新しい空のブランチを作成する方法はありません(ここでも、私が見る限り)。したがって、完全に空のブランチを作成するために新しいリポジトリを作成し、必要なブランチ(必要なコミットを含む)を再び追加する必要があります-@ user1338062の回答に従って。
必要が取られることを2つの異なるアプローチがあること、2つの異なる(多かれ少なかれ合理的な)シナリオのために-私は明らかにされていない可能性がありますどのようなこの答えの明確化を願っていますので、両方のあなたが行うことができるようにしたいかもしれないものを、順番にOPが要求することを完全にマスターするため。