0

ここで私の状況: 私たちは 2 人で C プロジェクトに取り組んでおり、bitbucket と git を DVCS として使用しています。私たちはこれらのシステムに本当に慣れていないので、それをうまく使う方法を本当に知りません.

私たちが両方で作業しているときに、ユーザー A が変更をコミットし、ユーザー B がその変更をプルしたい場合、次のようになります (ところで、ユーザー B は既にいくつかの異なるファイルで作業しています)。

$ git pull オリジン マスター

エラー: 次のファイルに対するローカルの変更は、マージによって上書きされます:

  • ビン/App.exe
  • ビン/App.pdb
  • App.csproj

最初の 2 つのファイルはコンパイル時に常に異なるため、上書きしたり、置き換えたりする必要はありませんが、3 番目のファイルは、マージできれば素晴らしいものになるでしょう。

インターネットで検索したところ、ユーザー B がレポをリセットする必要があることがわかりました。これは、ファイルを変更したため失われるため、非常にばかげています。

では、これらすべてのファイルをマージする解決策は何ですか?

ありがとうございました!

4

4 に答える 4

1

$ git stash変更をスタッシュしてリモート リポジトリから変更をプルし、必要な変更をオーバーラップするなどの操作を行う必要があります$ git stash pop。これを行うと、B が既にコミットしたすべての変更があり、その上に変更をポップすると、コピーが作成され、変更を安全にコミットしてリモートにプッシュできます。

  1. $ git stash
  2. $ git pull origin master
  3. $ git stash pop

  4. 変更を加える

  5. ステージング、コミット、プッシュ

変更をプルしたくない場合は、いつでもfetch最初にプルし、次にmerge意図するファイルのみをプルできます。

プルフェッチに関する同様の質問に回答しました。ここにマージしてください。

于 2013-10-17T16:25:47.410 に答える
0

これはすでに回答されているようですが、いくつかのヒントがあなたの場合に役立つと思います.

  1. *.exe を git リポジトリに含めないでください。それらを追跡する意味はありません。あなたの 1 人が異なるコンパイラ バージョンを使用している場合、変更される可能性があります。
  2. *.exe ファイルを に追加します.gitignore。git リポジトリのルート フォルダーで、ファイル.gitignoreがまだ存在しない場合は作成し、*.exeそこに式を追加します。
  3. すでに追加されている*.exeファイルを削除するには、次を使用しますgit rm -r --cached '*.exe'
  4. 同様に、*.oC でコンパイルされた出力ファイルの式を追加し、 *.pdb.

ローカルの変更を無視することに関しては、@uDayの答えはそれをほぼ要約していgit stashますgit pull origin master. そして、git stash pop

ただし、最後のgit stash popステートメントには警告が添付されています。マージの競合が発生した場合は、隠しエントリを明示的に削除する必要があります。

于 2013-10-18T04:44:26.760 に答える
0

私の解決策は次のとおりです。

git checkout bin/App.exe
git checkout bin/App.pdb

上記の 2 つのコマンドは、これらのファイルの変更をリセットします。次に、次のようにします。

git stash 

このコマンドは私の変更を一時的に隠します。

git pull origin master 

ユーザー B からの以前のコミットで競合が発生しない場合、プルはマージの競合なしで行われると想定されています。コマンドで変更を隠して戻ってくることができます。

git stash pop 

マージの競合が発生した場合は、それらを解決する必要があります。

于 2013-10-17T16:27:57.080 に答える