12

最近、GitHub for Windowsを使い始めました。

衝突したばかりです。コマンドラインでは、これを処理する方法を知っていますが、GitHub for Windows は、私が慣れていない状態にすることを選択しました:

C:\Users\w\Documents\GitHub\CmisSync [(6026d18...)|REBASE +0 ~1 -0 !1 | +0 ~0 -0 !1]> git status
# Not currently on any branch.
# You are currently rebasing.
#   (fix conflicts and then run "git rebase --continue")
#   (use "git rebase --skip" to skip this patch)
#   (use "git rebase --abort" to check out the original branch)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
...

競合を修正し、ファイルをコミットしましたが、実行するgit pushと次のように表示されます。

fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD) state now, use

    git push origin HEAD:<name-of-remote-branch>

マージ コミットをリモート マスターに取得するための推奨される方法は何ですか? 私はこれを達成すること
を疑います。git push origin HEAD:master

4

2 に答える 2

18

Simon Boudriasと話しているように、リベース中に何をしたかよくわからない場合は、git rebase --abort. 動詞が言うように、現在のリベースを中止し、リポジトリと作業コピーをリベース開始前と同じ状態のままにします。

その後、リベース プロセスを開始するために行ったことは何でも実行する必要があります (それが何であったかは言っていないと思いますが、それが本当に重要だとも思いません)。確かに、リベースは再び開始されます。ここから、元の質問への回答が始まります。

ステータス出力が示すように、競合があるようです。それらを解決する必要があります(通常、git status --shortプラスgit mergetoolを使用して解決しますmeld)、次にgit addファイルを解決します。ステータスが OK の場合 (たとえば、コミットする必要のあるすべてのファイルが競合なしで追加された場合)、git rebase --continue代わりにgit commit.

アイデアはgit rebase、特定のコミットの上にコミットのグループを適用することです。どのコミットが何の上に適用されているかはよくわかりませんが、それを念頭に置いておくことが重要です。コミットは 1 つずつ適用されるため、複数の競合が発生する可能性があることに注意してください。最後に適用されたコミットを確認するために使用します。現在適用されているコミットのコミット メッセージをgit log含むファイルがディレクトリに存在する必要があると思います。.git/

競合の解決中に、変更が後のコミットによって適用されることを知らずに (または忘れて) ファイルに変更を含めようとするのは、一般的な初心者のエラーです (私たちは皆そこにいます :))。

したがって、うまくいけば、いくつかの競合を解決し、ファイルを追加してgit rebase --continueそれらを ing した後、満足のいく機能的なリポジトリに到達し、git pushそこから実行できるようになるはずです。

最後になりましたが、最も重要なことです。すべてのリベース作業の後、git logパブリック コミットを変更していないことを確認するために使用します。たとえば、新しいブランチにリモートの HEAD コミットが含まれているとします。リベースは強力で非常に危険です。あなたは公開コミットをリベースしたくない - それはあなたが直面したくない唯一のgitの痛みかもしれません:)

于 2013-03-01T05:19:28.137 に答える
1

競合を解決したら、まずrebase呼び出してモードを終了する必要があります。git rebase --continueこれにより、プルしていたブランチ(あなたの場合はマスター)に戻ります。これは、コマンド ライン (posh-git プラグイン)masterREBASE

次に、を使用してプッシュできますgit push origin master。追加のパラメーターは Git によって自動入力される場合がありますが、それは設定によって異なります。

于 2013-03-01T04:46:22.870 に答える