2016-09-11 11 views
1

は、次のステップを考えてみ戻すとリベース明確化は

git checkout -b new_branch 
touch foo2.txt 
git add . 
git commit -m 'added foo2.txt' 

今、私たちはよmasterブランチに戻って、最初のコミットを元に戻してください(注意:git logコマンドを使用して、 'initial commit'のコミットハッシュを見つけることができます)。

git checkout master 
git revert <commit hash of initial commit> 

この時点では、masterブランチにはfoo.txtもfoo2.txtもありません。さて、new_branchは、この時点で

git merge new_branch 

を習得するためにマージさせ、foo2.txtは現在、マスターにマージされますが、foo.txtのはそこではありません。

質問ですが、どうすればfoo.txtをマスターに戻すことができますか?私はこれをやってみた:

git rebase new_branch 

しかし、それを戻すことはありません。したがって、一般的に、マスターでコミットを元に戻すと、別のブランチをマスターに戻してマージする必要があります。どのように 'missing'ファイル(この例ではfoo.txt)を引き継ぐ必要がありますか?

私が見つけた唯一の回避策は、マスターを削除してnew_branchの名前をmasterに変更することでした。

答えて

1

新しいコミットを作成してfoo.txtを元に戻します。 git revert <revert commit>またはgit cherry-pick <init commit>か、foo.txtを手作業で追加してコミットできます。

または履歴から<revert commit>を削除してください。 master<add foo2 commit>git reset <add foo2 commit> --hardでリセットしてください。 git rebase --onto <init commit> <init commit> <add foo2 commit>でも可能ですが、detached HEAD stateで終わるので、masterをこの新しいHEADにリセットする必要があります。

+0

「マスターをこの新しいHEADにリセットする必要がありますか?」という手順を明確にすることはできますか? – dcp

+1

@dcp 'git branch -D master; git branch master'または現在のHEADのsha1と' git checkout master; git reset --hard'を書き留めてください。 – ElpieKay

+0

有益な情報をありがとう、gitでこれらのことを行うさまざまな方法を示してくれて本当に良い答えです。 – dcp

1

を回復するには、git cherry-pickで初期コミットのハッシュを使用します。

git revert最初のコミットによって追加された行を削除するコミットを追加します。このブランチで行われたすべての変更がこの復帰後に適用されると、new_branchをマスターに再配置します。