Saya memiliki masalah serupa di mana saya lupa melakukan fork repo ke github saya dan menambahkan beberapa komit sebelum saya menyadari kesalahan saya.
Saya menemukan solusi yang cukup sederhana.
Pertama-tama hapus remote ke repo asli
git remote remove origin
Kedua, tambahkan remote ke fork baru di github saya
git remote add origin <my repo URL>
Kemudian saya mendorong ke master asal dan semua komit saya muncul di github saya.
Apakah ada cara saya memasukkan komit ke repo baru (kali ini komit pertama adalah file LICENSE) dan masih menyimpan info meta komit?
Ya, dengan menambahkan jarak jauh dan memilih komit di atas komit pertama Anda.
# add the old repo as a remote repository
git remote add oldrepo https://github.com/path/to/oldrepo
# get the old repo commits
git remote update
# examine the whole tree
git log --all --oneline --graph --decorate
# copy (cherry-pick) the commits from the old repo into your new local one
git cherry-pick sha-of-commit-one
git cherry-pick sha-of-commit-two
git cherry-pick sha-of-commit-three
# check your local repo is correct
git log
# send your new tree (repo state) to github
git push origin master
# remove the now-unneeded reference to oldrepo
git remote remove oldrepo
Sisa dari jawaban ini adalah jika Anda masih ingin menambahkan LISENSI ke repo Anda sebelumnya.
Ya. Anda dapat menempatkan komit LICENSE sebagai komit pertama dengan melakukan rebasing.
Rebasing adalah cara gits mengatur ulang urutan komit sambil mempertahankan semua pembuat komit dan tanggal komit tetap utuh.
Saat mengerjakan repo bersama, umumnya tidak disarankan kecuali seluruh tim Anda fasih. Bagi yang tidak, mereka dapat mengkloning salinan baru dari repositori.
Inilah cara Anda mendapatkan komit LICENSE sebagai komit pertama.
1. Perbarui dan rebase salinan lokal Anda
Lihat proyek Anda dan tempatkan file LICENSE dalam komit DI ATAS dari 3 tumpukan komit Anda saat ini.
#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'
Kemudian lakukan rebase interaktif pada cabang master untuk MENUTAR ULANG komit.
git rebase -i --root
Ini akan membuka editor. Pindahkan baris terbawah ("Komit awal" Anda, komit terbaru) ke bagian atas file. Kemudian simpan dan keluar dari editor.
Segera setelah Anda keluar dari editor, git akan menulis komit sesuai urutan yang baru saja Anda tentukan.
Anda sekarang memiliki salinan lokal dari repositori yang diperbarui. lakukan:
git log
untuk memverifikasi.
2. Dorong paksa status repo baru Anda ke github
Sekarang setelah salinan Anda diperbarui, Anda harus mendorongnya secara paksa ke github.
git push -f origin master
Ini akan memberi tahu github untuk memindahkan cabang master ke lokasi barunya. Anda hanya boleh memaksa push pada kesempatan langka seperti ini di mana semua orang yang bekerja dengannya mengetahui perubahan yang tertunda, jika tidak maka akan membingungkan kolaborator Anda.
3. Sinkronkan kolaborator ke github
Terakhir, semua kolaborator harus melakukan sinkronisasi ke repositori ini.
Pertama mereka harus memiliki repositori yang bersih karena perintah berikut dapat merusak jika ada perubahan yang belum disimpan.
# make sure there are no unsaved changes
git status
# pull the latest version from github
git fetch
# move their master branch pointer to the one you published to github.
git reset --hard origin/master
Itu dia. Semua orang harus sinkron sekarang.