1

3つのgitコミットがあるとしましょう:

  1. サイドバーで変更をコミットする
  2. フッターの変更をコミットする
  3. ヘッダーの変更をコミットする

ここで、私が精神的な目覚めを経験し、必要な変更はヘッダーとサイドバーの1つだけであり、フッターは問題なく、変更する必要がないことに気付いたとしましょう。

次のようなコマンドはありますか?

  • commit#3からcommit#2を引いたものをマージします
  • commit#2を削除します
  • commit#3とcommit#1をマージします

(または、commit#2が発生しなかった他の方法)。

4

3 に答える 3

2

インタラクティブリベースを使用すると、コミットの変更、再配置、マージ、メッセージの変更などを行うことができます。

git rebase --interactive

ヘルプを引用して:

# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

コミットを失うことはあなたが望むものです。

于 2013-02-02T19:52:44.553 に答える
1

を使用すると、いつでも1回のコミットから変更を元に戻すことができますgit-revert

1つ以上の既存のコミットが与えられた場合、関連するパッチによって導入された変更を元に戻し、それらを記録するいくつかの新しいコミットを記録します。これには、作業ツリーがクリーンである必要があります(HEADコミットからの変更はありません)。

注:git revertいくつかの新しいコミットを記録して、以前のコミットの効果を元に戻すために使用されます(多くの場合、障害のあるコミットのみ)。作業ディレクトリ内のコミットされていないすべての変更を破棄する場合は、git-reset(1)、特に--hardオプションが表示されます。別のコミットでのように特定のファイルを抽出する場合は、git-checkout(1)、特に。を参照する必要がありますgit checkout <commit> -- <filename> syntax。どちらも作業ディレクトリ内のコミットされていない変更を破棄するため、これらの選択肢には注意してください。

それで:

git revert <commit-id-of-footer-changes>
于 2013-02-02T19:43:51.940 に答える
1

cherry-pick必要なコミットをマージしてから、revertフッターを変更する前に開発ブランチをコミットするために使用できます。

git checkout branch_to_merge_into
git cherry-pick commit#1 commit#3
于 2013-02-02T19:58:39.383 に答える