次のgit履歴があると想像してください。
a ----- b ----- c
HEAD
ここで、HEADはcにあります。
今、私は(a)にバグを見つけましたが、これは明らかに(b)と(c)にもあります。私が今やりたいのは、(a)のコードを変更(バグを修復)し、(b)と(c)でも同じものを更新したいということです。gitでこれをどのように行う必要がありますか?
ありがとう
次のgit履歴があると想像してください。
a ----- b ----- c
HEAD
ここで、HEADはcにあります。
今、私は(a)にバグを見つけましたが、これは明らかに(b)と(c)にもあります。私が今やりたいのは、(a)のコードを変更(バグを修復)し、(b)と(c)でも同じものを更新したいということです。gitでこれをどのように行う必要がありますか?
ありがとう
あなたの質問から、バグがないように履歴を表示したいようです。
次のようなことができます。
d
。 git rebase -i <hash-of-commit-before-a>
. pick
その前にコマンド ( ) が付きます。 a
ます (2 行目にある必要があります)。 squash
なく) に変更します。
これにより、新しいコミットが最初のコミット にマージされます。pick
d
a
これらのコミットを別のリポジトリにプッシュした場合、リベースはお勧めできません。簡単に言えば、これは、既存のコミットを並べ替えるだけでなく、(新しいハッシュを使用して) 新しいコミットを実際に作成しているためです。他の誰かがあなたのコードをプルして元のコミットに基づいた作業を行った場合、その人が再度プルすると重複が生じ、手動で修正する必要があります。より良い説明については、リベースの危険性を参照してください。
git rebase -i HEAD~3
#An editor window will now open showing 3 commits. Replace 'pick' with 'e', save exit.
#git will now give you a chance to edit last 3 commits. Edit the files to fix the bug, then
git add -u
git commit -m"New message"
git rebase --continue
#This will repeat 3 times. After that, you will have a new set of last 3 commits (with new sha1 of course).
ところで、この時点以降、3 つのコミットが既にリモート (オリジン) にある場合、「プッシュ」を実行できなくなります。次のことを行う必要があります。
git push -f
これにより、他の人が古いコミットを持っている場合にプルすることもできなくなります。しかし、他の人がこれを行うと、それは解決できます。
git stash # save your changes.
git reset --hard HEAD~3
git pull
git stash pop