記事ディレクトリ
コードの競合を解決する方法
今日ウェアハウスを更新したところ、最新のコードがプルされておらず、拒否されていることがわかりました。そこで git pull を実行することにしましたが
、与えられたプロンプトが以前とは異なることがわかりました:
通常の方法は git commit -m "message" である必要があります。その後、競合は解決されます
。心配しないで、git を見てみましょうstatus. ステータス
表示が通常のものと異なります インタラクティブなリベースが進行中です なんということでしょう; 指定された参照手順はまだ git rebase コマンドに関連していますので、従来の考え方に従って処理して、実現可能かどうかを確認してみましょ
う
。競合があるため、次のコマンドを実行しました
git add .
git commit -m "..."
このとき、git Push を実行すると拒否されました。
プロンプトに従って git Push Origin Master を実行すると、今度は
ローカル ブランチがリモート ブランチよりも遅れているため、プッシュが許可されていないというエラー メッセージが表示されます。
ただし、前のコマンドはすでに最新のコードをプルし、競合を解決しています。なぜ効果が現れないのでしょうか?
この時点で、効果を確認するために git pullorigin master を再度実行します。
結果は残酷であり、まだ拒否されています。
次に、プロンプトに従ってコマンドを実行します。
まず git rebase --abort を実行します。ご想像のとおり、以前にプルしたコードは消えています。
次に、git pull、競合の解決、git add の順に実行します。
その後、git rebase -- continue を実行します。 . コマンドを実行したところ、出力が異なることがわかりました。
このとき、ログ git log を確認してください。リモート コミットがローカル コミットにマージされていることがわかります。
つまり、競合を解決するこの方法はマージとは異なります
。
これはコード ブランチ マージのモードに関連しています。git
ウェアハウスには 2 つのコード マージ モードがあります。
-
gitマージ
-
git rebase
の 2 つの方法の違い -
git merge は、別のブランチをこのブランチにマージするマージです。非同期コミットがある場合、別のブランチからのコミットが現在のブランチにマージされ、マージ コミットが生成されます。これにより、チームのコミット レコードの信頼性が保証されます。
-
Git rebase はリベースです。リモート ブランチがこのブランチと競合する場合、git rebase 後、リモート ブランチはローカル ブランチに更新され、すべてのローカル コミットはリモート ブランチをプルした後の最新のコミットに基づきます。マージ コミット ブランチがない場合、比較的きちんとした履歴レコードが維持されます。
-
git merge は競合を 1 回処理するだけで済みますが、git rebase は競合を複数回処理する必要がある場合があるため、 git rebase -- continue コマンドがあります。
-
実際のプロジェクト シナリオの場合は、全員が git merge を使用することをお勧めします。
-
他の開発同僚がリモート ブランチで共同作業し、git rebase を使用してマージしている場合、送信レコードが混乱する可能性があります。!!誰もがリベースしています。おそらく、あなたは私の記録をリベースし、私は彼の記録をリベースし、彼はあなたの記録をリベースします。この関係を想像してみてください。
gitリベースプロセス
# 1.先拉取代码
git pull
# 2. 解决冲突并保存到暂存区
git add .
# 3. 继续处理下一个commit的冲突
git rebase --continue
# 或者 终止变基
git rebase --abort
git pull モードを変更する
# 设置rebase模式
git config --global pull.rebase true
# 获取
git config --global --get pull.rebase
# 删除
git config --global --unset pull.rebase
まとめると、上記の問題は興味本位でプルモードを変更したために発生したもので、結果的にマージに戻すことで解決しました。