2017-03-16 7 views
0

私は自宅でも仕事でも仕事をしていますが、ある日、私は自分のコミットを仕事中にプッシュするのを忘れて、自宅で開発を続けました。彼らは任意の競合を持っていないので、私は、直線ツリーを持っているしたいのですがもう一度書き直す必要なしにgitツリーをマージする

enter image description here

:今日、私はこのようなツリーになってしまいました。それはちょうど私がプッシュするのを忘れた問題でした。これをどうすれば解決できますか?

私はgit reset --hardを13日目にすることができますが、13日後に書き込んだコードをすべて書き直す必要があります。すべてを書き直すことなくgitツリーを修正する方法はありますか?

+0

'git reset --hard'を実行する前に最後の青いコミットで新しいブランチを作成することができます。 –

答えて

2

1つの解決策は、マージの前に最後の青いコミットでブランチを作成することです。そして、あなたはマスターをリセットしてリベースすることができます

$ git branch work <sha1 for last blue commit> 
$ git checkout master 
$ git reset --hard <sha1 for black commit on the 14th> 
$ git checkout work 
$ git rebase master 
$ git checkout master 
$ git merge work 
$ git push -f origin master 

警告:誰が既に変更を引っ張っており、それらの上にコミットされ、その後、リベース彼らに頭痛の多くの原因となります。上記のコマンドを実行する前に、すべての同僚にこの可能性について警告する必要があります。心の中で、このプロジェクトに取り組んでいるすべての同僚がちょうどGitHubのからレポをフェッチし、正しいへmasterをリセットすることによって、彼らの地元のレポを更新できると

はコミット:

$ git fetch origin 
$ git checkout master 
$ git reset --hard origin/master 

(なお、作業機械

+0

rebaseとは何ですか? (作業枝で?) –

+0

@RodrigoSouza私はあなたにGoogleの "git rebase"をお勧めします。要約すると、コミットを 'work'ブランチから(リセット)' master'ブランチの上に移動して、リニアコミット履歴を生成します。 –

+0

それはうまくいきました..それは既にギタブに公開されているので、ギターから引き抜くときに私は家で同じことをしなければなりませんか? –

関連する問題