私は理解していないように見える奇妙な問題に悩まされています。同じリモートを指す 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 がそれらを表示しなかったのはなぜですか? 誰かこれを説明できますか? また、どうすれば元に戻せますか?