2

私は理解していないように見える奇妙な問題に悩まされています。同じリモートを指す 2 つのローカル git ブランチがありました。ローカル ブランチはマスターテナントであり、ws の.gitに次の構成があります。

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@egitrepo:project.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "tenant"]
    remote = origin
    merge = refs/heads/master

コマンドラインでリモートを指定せずに、両方のブランチで簡単にgit pullを実行できるように、これを行いました。

マスターブランチが更新されておらず、古い間、テナントブランチで作業しています。テナントブランチに変更を加え、git pullを実行して、変更をリモートにプッシュしようとしました。

テナントブランチから git push を実行すると早送りエラーが発生しました。

To git@egitrepo:milkyway.git
    ! [rejected]        master -> master (non-fast-forward)
  error: failed to push some refs to 'git@egitrepo:milkyway.git'

この時点で、周りを見回したところ、これはgit pushがすべてのローカル ブランチをリモート、つまりテナントマスター(更新されていない) の両方にプッシュしようとしたことが原因であることがわかりました。

設定することで、この問題の解決策を見つけました

 git config --global push.default upstream

これは、現在のブランチのみを対応する upsteam ブランチにプッシュするように git に指示します。これで問題が解決し、テナントブランチからのプッシュが成功しました。

git diffを使用してコミット履歴を調べたところ、コミット の一部であってはならない他の多くのファイルが見つかりました。コミット用に8つのファイルのみを追加し、コミットを行う前にgitステータスを非常に注意深く調べたところ、コミットされる変更セクションの下に8つの正しいファイルのみが表示されました。

他のすべてのファイルはどのようにして私のコミットに入ったのですか? それらは、私が試した最初の失敗したgit pushの一部としてマスターから追加されましたか? これは、マスターブランチで変更したファイルの一部であるためです。git status の正しいセクションで git がそれらを表示しなかったのはなぜですか? 誰かこれを説明できますか? また、どうすれば元に戻せますか?

4

1 に答える 1

1

コミット履歴と reflog を確認して、何が起こったのかを判断できます。

git-reflog を使用すると、マスターからテナントへのマージが表示されるはずです。

于 2012-11-14T01:55:19.273 に答える