そのため、Git を理解するのに少し苦労しています。リモート(GitLabがインストールされている)リポジトリを使用して、Windowsで使用しています。git pull
私はマスター ブランチのローカル コピーを持っており、ローカル コピーを最新の状態に保つために頻繁に 使用することにかなり熱心に取り組んでいます。
リリースの時間になったので (もちろん... これが起こるときではありませんか?)、変更した 1 つのファイルをチェックインしたいと思います。と入力しgit pull
ますが、エラーが発生します。
error: Your local changes to the following files would be overwritten by merge:
<path>/filename.py
Please, commit your changes or stash them before you can merge.
Aborting
私git diff
がコミットしようとしているのと同じ場所で別の開発者がタイプミスを修正しました。簡単にgit status
明らかにします:
Your branch is behind 'origin/master' by 4 commits, and can be fast-forwarded
そのため、途方に暮れて、変更をローカル リポジトリにコミットします。
git add <filename>
git commit -m "reworking to ignore logs"
今、私はgit pull
成功することができます。
git pull origin master
...
Merge made by the 'recursive' strategy
file1
file2...
....
<filename>
5 files changed, 1 insertion, 63 deletions...
これで、変更をリモート リポジトリにプッシュできるようになりました
git push
しかし:ここに私の質問があります。リモートサーバーでは、コミットと、コミット後にローカルによって引き起こされたファイルの変更の両方が表示されますpull
。つまり、基本的にはリモート ファイルが変更されたことを示していますが、実際には、リモート リポジトリ にすでにあったものに変更されています。
上司が慌てて電話をかけてきて、なぜこれらの (他の 4 つの) ファイルをすべて変更したのかと尋ねてきましたが、私は答えることができません。最終的に 2 つのコミット (現在のコミットと変更前のコミット) をチェックアウトし、それらを比較して、違いは私の 1 つのファイルの変更のみであることを証明してから、両者とも安堵のため息をつきます。
私の質問は次のとおりです。何が欠けていますか? リモートで、リモートの HEAD に一致するようにファイルを変更したことを確認したいと Git が考える必要があるのはなぜですか? 私はingについてこの質問git squash
を見てきましたがgit rebase
、私にも役立つ可能性があることに気づきました。Git がこれを行う理由を誰かが理解するのを手伝ってくれますか? 「分散型」のパラダイム シフトを完全には受け入れていないように感じます。