7

たとえば、次のシナリオを考えてみましょう。

  • 構成ファイルを誤って追跡してコミットした
  • .gitignore各開発環境には独自の構成ファイルが必要です。git add
  • あなたはしばらく気づかなかった

コミット

A - B - C - D - E
    |   |   |   |
    |    \  |  /
    | commits that accidentally track application config
    |
    commit to untrack & .gitignore config
    [finally you did the right thing... but too late?]

C、D、または E にリセットまたはチェリーピックすると、構成ファイルが上書きされます。

B コミットを適用して C - E を書き換える方法はありますか?

4

2 に答える 2

3

構成ファイルを追跡しないだけにする必要がある場合は、構成ファイルの追跡を解除し、gitignore などに追加してコミットすることをお勧めします。構成に機密情報が含まれている場合は、リポジトリのコミットから削除する必要があります。その他は行くが履歴を変更する (GitHub のこのヘルプページでは、これを行う方法について説明しています - http://help.github.com/remove-sensitive-data/ )

Git の性質と要件により、コミットを変更して同じコミットのように見せることはできません。

于 2012-04-23T09:28:12.453 に答える
0

作成者がすべてあなたであり、影響を受けるコミットの日付を保持する必要がない場合 (それらすべて、AE)、それはほとんど自明のことですが、他の方法はもっと時間がかかります

あなたの写真から作業して、間違いの前にリビジョン F をコミットとして追加します。あなたがブランチ「マスター」にいると仮定すると、

git log --oneline master~6..master

それらのリビジョンを表示する必要があります。

git branch corrected master~5   # this is F, master~0 is A i.e. the branch tip

git config advice.detachedhead false  # just to get it to stop blabbing at you

# make corrected commit E
git checkout master~4
git rm --cached yourconfigfile
echo ref: refs/heads/corrected >.git/HEAD
git cat-file -p master~4 | sed 1,/^$/d | git commit -m-

# make corrected commit D
git checkout master~3
git rm --cached yourconfigfile
echo ref: refs/heads/corrected >.git/HEAD
git cat-file -p master~3 | sed 1,/^$/d | git commit -m-

# ... repeat for C, B, and A

最後に、

echo ref: refs/heads/master > .git/config

これで完了です。作成者/日付情報を保持するには、ヘッダーから GIT_{AUTHOR,COMMITTER}_{NAME,EMAIL,DATE} を設定するgit cat-file -pだけです。必要に応じて sed を作成します。

于 2012-04-23T22:03:36.260 に答える