0

私は今Gitを使い始めたばかりで、以前はバージョン管理にCVSを使用していました。

誰かがGitでマージ競合のケースに対処する方法を教えてもらえますか?また、そのような場合に従うべき標準的な手順は何ですか。

以下の手順を実行した後、状況に直面しました。

  1. git addおよびを使用して、いくつかのファイルをローカルリポジトリにコミットしました。git commit
  2. 後でローカルリポジトリの変更をリモートリポジトリにプッシュしようとすると、早送り以外のエラーで失敗し、プッシュする前にプルするように求められます。
  3. そこでgit pull、リモートリポジトリからローカルリポジトリに最新のものをフェッチしようとしました。プルは失敗し、マージの競合があったと述べました。

リモートからローカルリポジトリにプルしてから、ステップ1(ファイルのコミット)を実行するとします。リモートリポジトリにプッシュする前に、他の誰かが変更をプッシュした場合はどうなりますか。マージで終了するプッシュは通常のケースだと思います。これらのケースに対処する方法は?

プルにはフェッチとマージが含まれると思います。私の場合、自動マージは失敗したようです。上記の場合、私は何をしなければなりませんか?そのような状況にならないようにする方法も教えてください。

4

2 に答える 2

3

競合するファイルがある場合、git は競合する各ファイルに競合マーカーを挿入します。競合マーカーには、次のような両方のブランチからのコードが含まれています。

 <<<<<<<<< LOCAL_BRANCH_NAME
 local code goes here
 ==========
 merge branch code goes here
 >>>>>>> MERGE_SHA

git status を実行すると、これらのファイルのステータスが「両方とも変更済み」であることがわかります。これらは競合しています。技術的には、これらを解決するために必要なのは do だけですgit add file、明らかにそれだけでコードが台無しになります。

競合を解決する最も簡単な方法は、 を使用することgit mergetoolです。ファイルが競合しているときに実行git mergetoolすると、git はどのマージ ツールを使用するかを尋ねてきます。長いリストがサポートされており、私の好みのツールは kdiff3 です。 git次に、ツールがサポートしている場合は 3 方向の diff を使用して、競合している各ファイルを順を追って説明します (3 方向の diff を使用することを強くお勧めします。これにより作業がはるかに簡単になります)。

コメントで示唆されているように、git bookを読むことは、始めたばかりのときに必須です。

于 2013-02-06T15:15:28.260 に答える
1

以下は、私が git コミットを行う方法の簡単なリストです。

  1. git clone <repository url>
  2. 変更を加える
  3. git stash: これにより、コミットされていない変更が一時キャッシュに隠されます (作業ディレクトリから一時的に削除されるため、クリーン コピーが作成されます)。
  4. git pull最新のリポジトリ バージョンを取得するには
  5. git stash popスタッシュされた変更をローカル リポジトリに適用します (スタッシュから削除します)。これにより、マージやリベースと同様に競合が発生する可能性があります
  6. 競合を修正する
  7. git add <changed files>
  8. git commit、短いメッセージを提供するために使用-mするか、それを省略してエディターを開く
  9. git push変更をリモートに公開するには

発生した問題を回避する方法は、プルの前に変更を隠しておき、プルが完了した後に隠しをポップすることです。

于 2013-02-06T15:02:45.253 に答える