[解決済み] gitで、リポジトリに無関係のブランチを導入する簡単な方法はありますか?
質問
今日、友人のgitの問題を手伝っているときに
ブランチと完全に分離する必要があります。
master
ブランチです。
このブランチの中身は、本当に出自が異なるものでした。
で開発されていた
master
ブランチとなる予定でしたが
にマージされます。
master
ブランチを作成しました。
ジョン・ウィグリーさんの Gitを根本から見直す アップ どのように ブランチとは、基本的にコミットに対するラベルであり、ある一定の法則に従ったものです。 コミットがどのようにファイルのツリーと結びついているか、また、オプションとして を親コミットに追加しました。に対して親レスコミットを作成しました。 既存のリポジトリに、git の配管を使用します。
そこで、インデックスにあるすべてのファイルを削除しました ...
$ git rm -rf .
... tarballからディレクトリとファイルを抽出し、それらを インデックス
$ git add .
... そして、ツリーオブジェクトを作成しました ...
$ git write-tree
(
git-write-tree
は、作成されたツリーオブジェクトの sha1sum を教えてくれました)。
そして、親コミットを指定せずに、ツリーをコミットしました...
$ echo "Imported project foo" | git commit-tree $TREE
(
git-commit-tree
は、作成されたコミットオブジェクトの sha1sum を教えてくれました)。
... そして、新しく作成した コミットです。
$ git update-ref refs/heads/other-branch $COMMIT
最後に
master
ブランチで作業を続けました。
$ git checkout -f master
これは予定通り動作したようです。しかし、これは明らかに というのは、これから始めようとする人に勧めたい手順です。 を使用することは、控えめに言っても、とても重要です。 を簡単に作成する方法はありますか? 新しいブランチは、これまで起こったこととはまったく関係なく を使用することができますか?
解決方法は?
新しい機能(V1.7.2以降)があり、このタスクは他のどの回答にもあるものよりも少しハイレベルなものとなっています。
git checkout
がサポートされるようになりました。
--orphan
オプションを使用します。から
マンページ
:
git checkout [-q] [-f] [-m] --orphan <new_branch> [<start_point>]
を新規に作成します。 オーファン という名前のブランチを作成しました。 から始まる。 <start_point> に切り替えてください。このとき この新しいブランチでの最初のコミット は親を持たず 新しい履歴のルート 他のすべての ブランチとコミットです。
これでは
まさに
からのインデックスと作業ツリーを生成するからです。
<start_point>
(これは結局のところ、チェックアウトコマンドであるため)。他に必要なアクションは、作業ツリーとインデックスから不要なアイテムを削除することだけです。残念ながら
git reset --hard
は機能しませんが
git rm -rf .
を代わりに使うことができます。
rm .git/index; git clean -fdx
他の回答で紹介されています)。
要約すると
git checkout --orphan newbranch
git rm -rf .
<do work>
git add your files
git commit -m 'Initial commit'
私は
<start_point>
デフォルトはHEADで、どうせ気にしないので、指定しない。このシーケンスは、基本的に以下のコマンドシーケンスと同じことを行います。
Artemの回答
ただ、怖い配管コマンドに頼らずに済みます。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] git rebase の取り消し
-
[解決済み] Git で現在のブランチ名を取得するには?
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み】ローカルリポジトリのブランチをリセットして、リモートリポジトリのHEADと同じにする
-
[解決済み】既存のGitブランチをリモートブランチに追従させる?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】gitがローカルバージョンをリモートバージョンに置き換える
-
[解決済み】マージ後のコミットでGitエラー - fatal: マージ中に部分コミットができない
-
[解決済み】gitが「変更をコミットするか、マージする前にstashしてください」と言うのを解決するには?
-
[解決済み】Git Push Error: リポジトリデータベースにオブジェクトを追加する権限が不足しています。
-
[解決済み] 短いGitバージョンのハッシュを取得する
-
[解決済み] Git エラー : 'upstream' は git リポジトリでないようです。
-
[解決済み] git rebase: "error: cannot stat 'file': パーミッションが拒否されました"
-
[解決済み] Gitのフォルダ構造で変更・追加されたファイルのみをエクスポートする機能
-
[解決済み] 新しいプロジェクトのための新しい空のブランチを作成する
-
[解決済み] 新しい(そして空の!)「ルート」ブランチを作成する方法は?