新しいプロジェクト用の新しい空のブランチを作成する


351

プロジェクトの保存にgitリポジトリを使用しています。元のブランチから分岐しているブランチがあります。しかし、今度は、いくつかのドキュメントを追跡するための小さな新しいプロジェクトを作成します。そのために、新しい空のブランチを作成してファイルの保存を開始し、ネットワークの他のユーザーにそのブランチのクローンを作成してもらいます。

どうすればできるでしょうか?

いくつか試しましたがうまくいきませんでした。

$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc

ブランチは問題なくプッシュされているようですが、フェッチまたはプルを実行すると、他のブランチから情報がダウンロードされ、他のプロジェクトからいくつかの追加ファイルも取得します。最良の解決策は何ですか?


11
なぜこれをブランチに保存する必要があるのですか?ブランチは通常、同じコードベースからのいくつかの逸脱のためのものです。たぶん、新しいリポジトリを開始するだけの方が良いソリューションでしょう。
Benjamin Bannier

2
まあ、私たちは以前にそれをやった、IIRC、そしてもう一度やりたいので、私は興味がある;)
fazineroso

3
「新しいプロジェクトの場合」 -@honkとして、これを新しいリポジトリに配置することをお勧めします。それらを統合するためのそこからの2つのオプション。submodule元のプロジェクトでaにしdocs/ます。たとえば、他のリポジトリをポイントします。または、コードを後でマージする場合は、リモートとして追加します。
gertvdijk

1
孤立したアプローチのもう1つの欠点は、.gitignore'dファイルを保持し、2つのルート(ブランチ)を絶えず切り替える必要があることです。だから私はまた、新しいフォルダーで、同じリモートを持ち、別のブランチにプッシュする、新しいレポアプローチにも賛成です。
シモ2014年

回答:


666

孤児としてブランチを作成できます:

git checkout --orphan <branchname>

これにより、親のない新しいブランチが作成されます。次に、次のコマンドで作業ディレクトリをクリアできます。

git rm --cached -r .

そして、ドキュメントファイルを追加し、コミットして、githubにプッシュします。

プルまたはフェッチは、すべてのリモートブランチに関するローカル情報を常に更新します。単一のリモートブランチの情報をプル/フェッチするだけの場合は、それを指定する必要があります。


18
いい答えですが、新しいブランチが(前のブランチからの)すべてのファイルがステージングされた状態で開始されるのは、ちょっと面倒です。
Matt Fenwick 2013

12
発行時git checkout --orphan <branch>; に<branch>のリストが表示されませんgit branch
Santosh Kumar

51
git checkout --orphan一つは使用することができますgit reset --hard残されたファイルを削除します。
Ilya Kozhevnikov

16
後でブランチgit checkout --orphan <branch>が表示されないのは、まだコミットされていないためです。最初のコミット後、git branch新しいブランチが出力されます。
Krøllebølle

13
git clean -fdは、追跡されていないファイルを削除します。
stefgosselin 2017

71

正解は、孤立したブランチを作成することです。私はこれを私のブログで詳細に説明しています。(アーカイブリンク)

...

開始する前に、最新バージョンのGITにアップグレードしてください。最新バージョンを実行していることを確認するには、次を実行します。

which git

古いバージョンが出力される場合は、インストールしたバージョンを含むフォルダーでPATHを拡張する必要がある場合があります。

準備ができました。gitチェックアウトを含むフォルダーにcdを実行した後、孤立したブランチを作成します。この例では、ブランチに「mybranch」という名前を付けます。

git checkout --orphan mybranch

孤立したブランチのすべてを削除する

git rm -rf .

いくつかの変更を行います

vi README.txt

変更を追加してコミットする

git add README.txt
git commit -m "Adding readme file"

それでおしまい。走れば

git log

コミット履歴が最初から始まることに気づくでしょう。マスターブランチに戻すには、次のコマンドを実行します。

git checkout master

次のコマンドを実行すると、孤立したブランチに戻ることができます

git checkout mybranch

16
リンクのみの回答は推奨されません。リンクが移動または削除された場合、あなたの答えは価値がなくなります。重要な部分をこの答えに直接追加することを検討してください。以前の回答でカバーされていない問題に特に注意してください。
バイトバスター2013

3
残念ながらリンクはもう有効ではありません。
Alexey 2017年

1
アーカイブは素晴らしいものです。
lucid_dreamer 2017

3
重要なプロジェクトには追跡されていないファイル(構成、環境、キャッシュなど)があるため、作業ディレクトリ内のすべてを削除するのは危険です。
Slava Fomin II

12

次のように空の新しいブランチを作成します。

true | git mktree | xargs git commit-tree | xargs git branch proj-doc

proj-docファイルが単一のサブディレクトリの下ですでにコミットされている場合は、次の方法で新しいブランチを作成できます。

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc

これよりも便利かもしれないgit branch --orphanことは、多くのであなたを離れる場合git rmgit mv行うことをする。

試す

git branch --set-upstream proj-doc origin/proj-doc

そして、それがあなたの取得が多すぎる問題に役立つかどうかを確認してください。また、本当に1つのブランチのみをフェッチしたい場合は、コマンドラインで指定するのが最も安全です。


1
この回答は興味深いものです。完全に空の最初のコミットで別のブランチ/ルートを開始できるからです。
ステフェイン・グーリッホン

あなたはそれに切り替える気にしない場合は、空のブランチを作るための別の方法はあるgit checkout --orphan new-branch; git reset --hard
jthill

の使用は何xargsですか?
フラックス

@Fluxこれは、ツリーIDをcommit-tree argとして取得するもう1つの方法です。
jthill

現在のブランチを離れることなく空の新しいブランチを作成できるので、このアプローチが本当に好きです。さらに、開始点として空のコミットがあるという事実もあります。
ブライス

8

gitバージョンに--orphanオプションがない場合は、このメソッドを使用する必要があります。

git symbolic-ref HEAD refs/heads/<newbranch> 
rm .git/index 
git clean -fdx 

いくつかの作業を行った後:

git add -A
git commit -m <message>
git push origin <newbranch>

2
注意してください、git cleanあなたが削除したくないファイルを削除する可能性があります!実行git clean -ndxあなたが持つ本当のためにそれを実行する前に、それが削除されますどのようなファイルを見るために最初-fのオプション。
Lassi

7

masterファイル/ディレクトリを持つブランチがあるとしましょう:

> git branch  
master
> ls -la # (files and dirs which you may keep in master)
.git
directory1
directory2
file_1
..
file_n

空のブランチを作る方法を段階的に:

  1. git checkout —orphan new_branch_name
  2. 次のコマンドを実行する前に、正しいディレクトリにいることを確認してください。
    ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_
  3. git rm -rf .
  4. touch new_file
  5. git add new_file
  6. git commit -m 'added first file in the new branch'
  7. git push origin new_branch_name

ステップ2では、すべてのファイルをローカルで削除するだけで、新しいブランチ上のファイルとmasterブランチに保持しているファイルとの混乱を回避します。次に、手順3でこれらのファイルのリンクをすべて解除します。最後に、手順4以降で新しい空のブランチを操作します。

完了したら、ブランチを簡単に切り替えることができます。

git checkout master 
git checkout new_branch

1

Hiery Nomusからのこの回答に基づいています。

孤児としてブランチを作成できます:

git checkout --orphan <branchname>

これにより、親のない新しいブランチが作成されます。次に、次のコマンドで作業ディレクトリをクリアできます。

git rm --cached -r .

そして、あなたは空のコミットでブランチをコミットしてからプッシュするだけです

git commit -m <commit message> --allow-empty
git push origin <newbranch>

1

チェックアウトこの文書を、それがについて明確な詳細を持っています

--orphan <new_branch>
という名前の新しい孤立ブランチを作成し、<new_branch>そこ<start_point>に切り替えます。この新しいブランチで行われた最初のコミットには親がなく、他のすべてのブランチとコミットから完全に切り離された新しい履歴のルートになります。

以前にgit checkoutを実行した場合と同様に、インデックスと作業ツリーが調整されます。これにより、簡単にgit commit -aを実行してルートをコミットするのと同じように、一連のパスを記録する新しい履歴を開始できます。


1
ソリューションへのリンクを歓迎しますが、それがなくても回答が役に立つことを確認してください。リンクの周りにコンテキストを追加して、他のユーザーがそれが何であるか、なぜそこにあるのかを理解し、ページの最も関連性の高い部分を引用してくださいターゲットページが利用できない場合にリンクし直します。リンクに過ぎない回答は削除される場合があります。
ユンノシュ

1

私はこのヘルプを見つけました:

git checkout --orphan empty.branch.name
git rm --cached -r .
echo "init empty branch" > README.md
git add README.md
git commit -m "init empty branch"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.