web-dev-qa-db-ja.com

Git、どうやってOrigin / masterをコミットするのですか?

このコマンドでローカルマスターをコミットにリセットします。

git reset --hard e3f1e37

$ git statusコマンドを入力すると、terminalと表示されます。

# On branch master
# Your branch is behind 'Origin/master' by 7 commits, and can be fast-forwarded.

#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean

Origin/headerもリセットしたいので、Origin/masterにチェックアウトします。

$ git checkout Origin/master
Note: checking out 'Origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 2aef1de... master problem fixed for master. its okay now.

このコマンドでヘッダをリセットします。

$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.

それから私は私が成功しなかったことをOrigin/headerにcommitを追加しようとしました。

$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from Origin/master
nothing to commit, working directory clean

最後に、私は地元の主人にチェックアウトします。

$ git checkout master
Switched to branch 'master'
Your branch is behind 'Origin/master' by 7 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Origin/masterの頭をリセットしたので、localとOriginは同じ方向にあるべきだと思っていますが、gitは私のlocal/masterはOrigin/masterより7コミット遅れていると言っています。

どうすればこの問題を解決できますか?私が探しているものは、ローカル/マスターの頭とオリジン/マスターの頭が同じコミットを指していることです。次の画像は私がしたことを示しています。ありがとう。

enter image description here

203
Hesam

Origin/xxxブランチは常にリモートへのポインタです。ローカルリポジトリへのポインタではないため、チェックアウトすることはできません(コミットをチェックアウトするだけです。そのため、コマンドラインインターフェイスのブランチマーカーに名前が表示されず、コミットハッシュのみが表示されません)。

リモートを更新するためにあなたがする必要があるのはあなたのローカルな変更をマスターに強制することです:

git checkout master
git reset --hard e3f1e37
git Push --force Origin master
# Then to prove it (it won't print any diff)
git diff master..Origin/master
478
Simon Boudrias

解決策 がここ に見つかると、masterはすでにプッシュされていた以前のコミットに更新されました。

git checkout master
git reset --hard e3f1e37
git Push --force Origin e3f1e37:master

受け入れられた答えとの主な違いは、Pushコマンドのmasterの前のコミットハッシュ "e3f1e37:"です。

45
jkovacs

私は同じような状況にあったので、私は自分の状況を共有し、これらの答えが私にどのように役立ったかを考えました(皆さんありがとう)。

そこで、私は自分の進捗状況をメインブランチに保存するたびに、最後のコミットを修正してローカルで作業することにしました(私は知っています。

ある夜遅く、ハードウェアの故障やその他の問題への私の進歩を失うことを恐れている妄想的な恐怖の中で、私はmasterをOriginにプッシュすることにしました。その後もローカルのマスターブランチを修正し続け、もう一度プッシュすることにしたとき、私は別のマスターブランチに直面し、Origin/upstreamを修正できないことを知りました(duh!)私は地元の開発部門ができるように。

だから私はすでにコミットの後だったので、私はマスターをローカルにチェックアウトしませんでした。マスターは変わりませんでした。リセットする必要すらありませんでした - 私の現在のコミットはOKでした。

この場合はHEADがどんなものであっても私がマスターに強制したいコミットを何も指定せずに、私はPush to Originを強制しました。 git diff master..Origin/masterをチェックしたので違いはありません、それだけです。すべて修正しました。ありがとうございます。 (私は知っています、私はgit初心者です、許してください!).

それで、あなたが既にローカルであなたのマスターブランチに問題がなければ、ちょうど:

git Push --force Origin master
git diff master..Origin/master

ブランチがこことリモートの両方でmasterと呼ばれ、リモートがOriginと呼ばれると仮定すると:

git reset --hard <commit-hash>
git Push -f Origin master

ただし、他の誰かがリモートリポジトリで作業しており、変更をプルしている場合は、これを避ける必要があります。その場合は、不要なコミットを元に戻してから、通常どおりにプッシュすることをお勧めします。

0
Mahmoud Zaher