web-dev-qa-db-ja.com

gitで最初のコミットを削除するにはどうすればよいですか?

Gitの最初のコミットを削除する方法に興味があります。

何かをコミットする前のリビジョンは何ですか?このリビジョンには名前またはタグがありますか?

122
Jian Weihang

私にとって、最も安全な方法はupdate-refコマンドを使用することです:

git update-ref -d HEAD

名前付き参照HEADを削除するため、現在のブランチのすべてのコミットをリセット(ソフトに、作業を失うことはありません)になります。

最初のコミットを2番目のコミットにマージする場合は、rebaseコマンドを使用できます。

git rebase -i --root

最後の方法は、Orphanブランチを作成することです。このブランチは、同じコンテンツであるがコミット履歴がないブランチで、新しいコンテンツをコミットします:

git checkout --Orphan <new-branch-name>
228
tzi

すべてのコミットは親コミットを参照しているため、最初のコミットの前には何もありません。これにより、最初のコミットが特別になり(孤立したコミット)、以前の「状態」を参照する方法がなくなります。

したがって、コミットを修正したい場合は、単純にgit commit --amendを実行できます。これにより、別のコミットを作成せずにコミットが変更されます。

最初からやり直したい場合は、.gitリポジトリを削除し、git initで別のリポジトリを作成します

39
CharlesB

一時的なブランチをチェックアウトします。

git checkout-孤立したTEMP_BRANCH

すべてのファイルを追加します。

git add -A

変更をコミットします。

git commit -am "初期コミット"

古いブランチを削除します。

git branch -Dマスター

一時ブランチの名前をmasterに変更します。

git branch -m master

最後に、リポジトリを強制的に更新します。

git Push -f Origin master

8
Megha Sahu

最初のコミットを編集したい場合があります(gitリポジトリには常に最初のコミットがあるため)。通常のgit commit --amend --reset-authorの代わりにgit commit --amendを使用することを検討してください。

6
Max Beikirch

別の方法は次のとおりです。

  1. 保持したいブランチへのチェックアウト(devなど)git checkout dev
  2. 次に、リセットするブランチを削除しますgit branch -D master
  3. ここで、同じ名前の空のブランチを作成しますgit checkout --Orphan master

もちろん、これはすべてユースケースに依存しますが、ブランチが複数ある場合は、.gitディレクトリを削除しても意味がありません。

2
kumarharsh

他のブランチを保持したいが、たとえば、他のブランチへの共通の履歴なしでmasterブランチを新たに開始する場合、これを達成するための安全な方法の1つは、新しいリポジトリを作成し、古いリポジトリにその内容をプッシュすることです:

cd ..
git init newrepo
cd newrepo
# make some initial commits
git Push ../oldrepo master:newmaster

これにより、古いリポジトリにnewmasterブランチが作成されますが、その履歴は他のブランチのいずれにも一般的ではありません。もちろん、git Push -fmasterを上書きすることもできます。

すべてのブランチとすべての既存のコンテンツを破棄する場合は、実行するだけです

rm -rf .git/
2
user1338062

コミットしたがプッシュしていない場合は、。gitディレクトリとgit initを再度削除してください...

0
Ali Sajid

質問に対する答えは、次のことによって異なります。

  • ブランチの最初のコミットのみを削除したい(他のブランチをそのままにしておく)か、または

  • あるブランチの最初のコミットを削除し、その後のコミット(および他のブランチ)を「そのまま」残します。

これらの2つ目は比較的単純です。基本的にルートにリベースする必要があります-ここでの答えのほとんどは、これを行う方法に関するものです。

2番目の操作(1番目のコミットを削除し、ブランチからのみコミットし、他のブランチはそのままにしておく)は困難です。または、少なくとも、特にそれが発生し、変更がGitHubまたはBitbucketに反映されるようにする場合はさらに難しくなります。 Gitには、コミットせずにブランチをプッシュまたはプッシュする方法はまったくありません(私が知る限り)。また、GitHubまたはBitbucketのいずれにも、コミットされていない新しい空のブランチを作成する方法はまったくありません(ここでもわかります)。したがって、完全に空のブランチを作成するには、新しいリポジトリを作成し、@ user1338062の回答に従って、必要なブランチ(必要なコミットを含む)を追加し直す必要があります。

ですから、この答えが明白ではなかったかもしれないことを明確にすることを願っています-両方 OPが要求することを完全にマスターするために、できること。

0
Mike Beaton