github にレポをフォークするのを忘れて、自分の間違いに気付く前にいくつかのコミットを追加したという同様の問題がありました。
とても簡単な解決策を見つけました。
最初に元のレポへのリモートを削除します
git remote remove origin
次に、github の新しいフォークにリモートを追加します
git remote add origin <my repo URL>
次に、オリジン マスターにプッシュすると、すべてのコミットが github に表示されました。
<ブロック引用>
コミットを新しいレポ (今回は最初のコミットは LICENSE ファイル) に取得し、コミットのメタ情報を保持する方法はありますか?
はい、リモートを追加し、最初のコミットの上にコミットをチェリーピックすることによって。
# 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
この回答の残りは、ライセンスを以前のリポジトリに追加したい場合です。
はい。リベースすることで、LICENSE コミットを最初のコミットとして配置できます。
リベースは、すべてのコミットの作成者とコミットの日付をそのまま維持しながら、コミットの順序を再配置する git の方法です。
共有リポジトリで作業する場合、チーム全体が git に精通していない限り、一般的に推奨されません。そうでない場合は、リポジトリの新しいコピーを複製できます。
最初のコミットとして LICENSE コミットを取得する方法は次のとおりです。
1.ローカル コピーを更新してリベースする
プロジェクトをチェックアウトし、LICENSE ファイルを現在の 3 つのコミット スタックの一番上にあるコミットに配置します。
#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'
次に、マスター ブランチで REARRANGE へのインタラクティブなリベースを行います
git rebase -i --root
エディターが開きます。一番下の行 (「最初のコミット」コミット、最新のコミット) をファイルの先頭に移動します。次に、エディターを保存して終了します。
エディターを終了するとすぐに、git は指定した順序でコミットを書き込みます。
これで、リポジトリのローカル コピーが更新されました。する:
git log
確認します。
2.新しいリポジトリの状態を強制的に github にプッシュ
コピーが更新されたので、強制的に github にプッシュする必要があります。
git push -f origin master
これにより、マスター ブランチを新しい場所に移動するように github に指示されます。プッシュを強制するのは、このようなまれな場合に限ってください。プッシュを強制するのは、作業を行っている全員が保留中の変更を認識しているためです。そうしないと、共同作業者を混乱させることになります。
3.共同編集者を github に同期
最後に、すべての共同編集者がこのリポジトリに同期する必要があります。
まず、クリーンなリポジトリが必要です 保存されていない変更がある場合、次のコマンドは破壊的な可能性があるためです。
# 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
それでおしまい。全員が同期しているはずです。