- Published on
Githubリポジトリのコミットを初期化したい
- Authors
- Name
- Shou Arisaka nyapp.buzz/shou
- short bio
- Z世代の情報技術者。Next.jsで自作SNSを個人開発中。
Githubにgitリポジトリをリモートで送って、リポジトリをシェアしたはいいけど、何らかの事情、例えばreadme.md、リードミーファイルにタイプミスがあってちょこっと変更しただけ、とか、何か見られたくない編集履歴をコミットしてしまって、とりあえず今の状態のリポジトリを"最初のコミット"としてGithubリモートにpushしたい、といったようなケースが、あるかもしれません。
そんなときに使える手段を紹介します。
"git checkout"の"orphan"オプションを使用します。 "orphan"オプションでは、過去のコミットのなにもない状態の、gitが初期化されたような状態としてのブランチを仮想的に作り出し、 その仮想ブランチ上で"git commit"コミットすることでそのコミットが最初のコミットとしてそのブランチに登録されます。 ようは、過去のコミットを無視して1番目のコミットをするブランチを作るためのブランチ、というオプションです。
git checkout --orphan tmp02
orphanオプションをつけてcheckoutした場合、コマンド実行直後ではbranchにブランチは表示されません。これは仕様です。
$ git branch
main
tmp
といっても現在の実際のブランチは"tmp02"です。 "git log"をして、過去のコミットがなにもないので、コミットがないエラーとなることを確認します。
$ git log
fatal: your current branch 'tmp02' does not have any commits yet
"git status"でステーテス確認をしてみても、同様です。 もし過去のコミットがすでにあるなら、表示されるファイルは"change"のはずですが、ここでは"new file"となっています。
$ git status
On branch tmp02
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: main.user.js
new file: readme.md
コミットしてみましょう。
git add .
git commit -m .
コミットしたところで、"git branch"でブランチを改めて確認してみます。 ここではじめて、ブランチに"tmp02"が表示されるようになります。
$ git branch
main
tmp
* tmp02
さて、以下からがローカルのgitリポジトリを初期化する、という処理です。 以下のコマンド"-D"ではブランチ"main"をdelete、削除します。当然過去のコミットが消えるので気をつけてください。
git branch -D main
コミットが消えたところで、tmp02ブランチをmainブランチにコピーして移動します。
git checkout -b main
"git push"でgithubのリモートリポジトリにpushします。 リモート先のコミットが上書きされコミットが消えますのでこちらも注意してください。
git push -f origin main:main
"-f"--forceオプションをつけてpushをしないと、エラーになります。 リモートのリポジトリとローカルのリポジトリの進捗が異なる(リモートの方には過去のコミットがあるがローカルには1コミットしかない)ためです。 --forceオプションによりそれを上書きしてpushします。
$ git push -u origin main
Username for 'https://github.com': yuis-ice
Password for 'https://yuis-ice@github.com':
To https://github.com/yuis-ice/alc-plus.js.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/yuis-ice/alc-plus.js.git'
hint: Updates were rejected because the tip of your current branch is behind
あるいは、ブランチをmainに変更しなくても、"git push"でローカルブランチの指定を変更してやることで上手くできますね。
git push -f origin tmp02:main
15歳でWordPressサイトを立ち上げ、ウェブ領域に足を踏み入れる。翌年にはRuby on Railsを用いたマイクロサービス開発に着手し、現在はデジタル庁を支えたNext.jsによるHP作成やSaaS開発のプロジェクトに携わりながら、React.js・Node.js・TypeScriptによるモダンなウェブアプリの個人開発を趣味でも行う。
フロントエンドからバックエンドまで一貫したアジャイルなフルスタック開発を得意とし、ウェブマーケティングや広告デザインも必要に応じて担当、広告運用・SEO対策・データ分析まで行う低コストかつ高品質な顧客体験の提供が好評。
国内外から200万人を超える人々に支えられ、9周年を迎えるITブログ「yuipro」の開発者、デザイナーでありライター。現在ベータ段階の自作SNS「nyapp.buzz」を日本一の国産SNSとするべく奮闘中。