6

他の人の(git以外の)コードを変更しています。私はオリジナルをダウンロードし、修正を加え、銃を飛び越えて修正バージョンを最初のコミットにしました。これは間違いでした。最初のコミットとして、ダウンロードした元のコードを追加する必要がありました。

次に、怪我に侮辱を加えるために、最初の編集のブランチとして元のコードを追加しました。言い換えると、今では大きな混乱です:(

簡単に言えば、私が持っているものは下の青いグラフのように見えます。C5は実際の元のコードであり、C1、C2-C6は私の段階的な変更です(C4は冗長です)。私はむしろグリーンを私の歴史にしたいと思っています。

ここに画像の説明を入力してください

これを達成するために履歴を変更する方法はありますか?

どうもありがとう、

ずるい

4

1 に答える 1

10

私はこれをコマンドラインで完全に実行しましたが、何が起こっているのかを説明するためにSourceTreeからスクリーンショットを挿入します。

まず、C5コミットからコミットID(50da9c3)の最初の7桁または8桁を取得し、クリップボードまたはテキストエディットなどに挿入します。後で必要になります。

確認のため、開始状態は次のとおりです。

ここに画像の説明を入力してください

目的の場所に移動する手順は次のとおりです。

名前付きベースからコミットの構築を開始するために、ルート化されていない新しいブランチを作成します

git symbolic-ref HEAD refs/heads/base

ここで、gitからすべてのファイルとディレクトリを削除します

git rm --cached -r .

すべてのファイルが「追跡されていない」ので、ローカルの作業ディレクトリからそれらを削除します

git clean -d --force

次に、何も含まれていないコミットを作成します(これは、他のすべてが構築されるコミットになります)。

git commit --allow-empty -m'Initial Commit'

これで、ツリーは次のようになります。

ここに画像の説明を入力してください

次に、c5コミット(クリップボードにあるもの)をチェリーピックします。

git cherry-pick 50da9c3

ここに画像の説明を入力してください

次に、マスターブランチをベースブランチに再ルートします

git rebase --onto base --root master

ここに画像の説明を入力してください

これで、ベースブランチとc4-c5ブランチを削除できます

git branch -d base

ここに画像の説明を入力してください

git branch -D c4-c5branch

ここに画像の説明を入力してください

「初期コミット」はファイルのない空のコミットであることに注意してください。だまされないでください。C5コミットは、実際には最初のコンテンツベースのコミットです。

于 2012-04-11T08:43:20.380 に答える