3

ビルドに依存するファイルのディレクトリを数週間前にバージョン管理に追加するのを忘れたという問題があり、古いリビジョンをチェックアウトしたときにビルドできるように、それらを追加したいと考えています。

一連のコミットを編集するために使用できることはわかっgit rebase -iていますが、これは、チームの他のメンバーにマージの問題が発生するため、既にプッシュされた履歴に対して行うべきではありません。

filter-branchまた、使用すると、既にプッシュされている古いコミットからファイルを削除できることもわかっています。これらの変更を強制的にプッシュしても、他の人に問題が発生することはありません (これは既に成功しています)。

私の要点は、プッシュされた履歴の編集が問題ないように見える場合とそうでない場合があるように思われるので、問題が解決できることを願っています。

これらのファイルを既に共有されている履歴に追加することはできますか?

4

1 に答える 1

2

はい、しかしそれはその歴史を変えるでしょう。このデータを取得した人は、それに対処する必要があります。何をする必要があるかについては、アップストリーム リベースからの回復セクションのリベース マン ページのセクションを参照してください。続行する前に影響を受ける人に知らせて、変更をコミットできるようにすることをお勧めします。

これで問題ない場合は、不足しているファイルがあるはずの最初のコミットをチェックアウトし、ブランチを作成し、ファイルを追加してコミットを修正します。

git checkout <commit hash>
git branch new_branch
<add the missing files>
git add .
git commit --amend               <-- a text editor will open, just keep the message and continue

この時点で、ツリーは次のようになります。B修正前のコミットと修正B'後のコミットです。 C - D - Eそれ以降のコミットです。

- A - B - C - D - E
   \
    - B'

履歴を「修正」するためのC - D - Eリベース。B'

<`B` should still be checked out>
git rebase -i E

エディターが開き、移動するコミットのリストが表示されます。リストBの最初のコミットである可能性があります。削除する場合は、ファイルに , だけを残して削除しCます。ファイルを閉じて保存し、リベースを開始します。DE

ファイルが後のコミットで追加されていない場合、競合は発生しないはずですが、競合が発生した場合は解決する必要があります。

ツリーは次のようになります

- A - B - C - D - E
   \
    - B' - C' - D' - E'          <-- E' will be checked out. 

コミットB - C - D - Eがブランチによって参照されなくなった場合、コミットは表示されずgit log、後でガベージ コレクションによって削除されます。これにより、 が残りますA - B' - C' - D' - E'

于 2013-03-01T15:19:46.173 に答える