5

私はGITを初めて使用しますが、その概念は理解していますが、それが実践であることも理解していないと思います。

uitestプッシュ、コミット、プルを正しく行っていない可能性があるため、作業するブランチが与えられました。ブランチを分岐しました。

私はここにいるのは初めてなので、他の開発者コードをオーバーライドしたくありません。私のコードや変更は、git に慣れるための単なる実験的なものであり、それがどのように機能するかです。すべてのコピーがあるので、変更を破棄してもかまいません。私はすべてをやり直す必要があります。

$ git status
# On branch uitest
# Your branch and 'origin/uitest' have diverged,
# and have 47 and 6 different commits each, respectively.
#
nothing to commit (working directory clean)

どうすれば元に戻せますか? 自分の変更を破棄し、最新の変更から最新の変更を取り出して、他の人の作業を台無しにすることなく作業を続けます。

また、私はこれに慣れていないので、私にはあまり意味がないかもしれないので、あなたの答えについて少し説明してください.

どうもありがとう

4

1 に答える 1

5

いくつかの方法があります。

マージ

まず、単純に merge することもできますがorigin/uitest、それはブランチとマージのように見えるものを導入するという点で、最初から同じブランチであることを意図していたにもかかわらず、きれいな履歴を残しません。Linus は、この種のマージ コミットを「無意味」と呼ぶのが好きだったと思います。残念ながら、これは最も簡単な方法でもあります。

リベース

リベースはより高度なトピックになる傾向があり、注意しないと他の多くの問題を引き起こす可能性があります。とはいえ、無意味なコミットをせずにクリーンな履歴を取得するための優れた方法でもあります。この場合、次のことができます。

git rebase origin/uitest

あなたの uitest ブランチから、それはあなたが行ったすべての作業を取り、origin/uitest の作業の上に置きます。

ただし、いくつかの問題があります。まず、他のブランチを自分のブランチにマージした場合、git rebaseはそれらをドロップします。導入したマージ コミットを保持するには、フラグを渡す必要があり-pますが、それが常に正しいとは限りません。自分の変更をコミットするだけなら、私が説明したコマンドで問題ないはずです。

第二に、リベースを使用するときはいつでも、公開コミットをリベースしないことを常に覚えておく必要があります。親が変更されたため、リベースはコミット ID を変更します。人々があなたの作品をマージし、あなたがそれをリベースすると、履歴にあなたのコミットのコピーがいくつか残ることになります。これは悪いことです。したがって、この手法を適用するときは注意してください。

git rebaseとはいえ、あなたは友達を作りたいと思っています。強力で便利なツールですが、他の電動工具と同様に危険な場合があります。

仕事を捨てる

行ったことを単に破棄したい場合は、次を実行できます。

git reset --hard @{u}

また

git reset --hard origin/uitest

これにより、uitest ブランチが上流の or に一致するようにリセットされますorigin/uitest。コミットを破棄します。

個人的には、作品をリベースするか、少なくとも試してみます。失敗した場合、またはマージの競合が原因で複雑になった場合は、いつでも で中止しgit rebase --abort、フォールバックして変更をマージまたは破棄できます (ただし、マージすると同じマージ競合が表示される可能性があります)。

于 2013-04-05T10:07:39.000 に答える