2

私たちには約 10 人の開発者のチームがあり、誰かの変更が予期せず元に戻されるという状況に頻繁に遭遇しています。私たちのワークフローはとてもシンプルです。開発者はローカル コミットを作成し、アップストリームからプルしてからアップストリームにプッシュします (これは簡単に言えば私たちのワークフローですが、アップストリームの開発者個人のフォークから Github でプル リクエストを発行することも含まれる場合があります)。奇妙な動作は、開発者がローカル コミットを行い、アップストリームからプルしてから、自分の変更が元に戻ったことに気付くというものです。theirs私たちの誰もこの設定を持っておらず、実際のマージの競合も関係していませんが、git が戦略との競合を解決しているかのようです。変更は次のようになります。

ローカルコミット:

.some_style {
-  width: 150px;
+  width: 100px;
  color: black;
}

マージ後:

.some_style {
  width: 150px;
  color: black;
}

コードのこのセクションに触れる他のコミットはなく、マージの競合を手動で解決する人もいません (とにかく存在しないはずです)。開発者がマージを完了してアップストリームにプッシュした後、最初の開発者が行った変更を元に戻したように見える別の開発者のコ​​ミットに関する差分ログが表示されることがあります。通常、このリバート コミットは他の人の名前で表示されますが、その人は問題のファイルに触れていません。

他の開発者のコ​​ミット:

.some_style {
+  width: 150px;
-  width: 100px;
  color: black;
}

これがどのように起こっているか、またはそれを再現する方法はわかりません。おそらく、git コラボレーションに関する私たちの知識はいくつかの点で不足しており、誰かが私たちを正しい方向に向けてくれることを願っています.

編集 この問題は css/scss ファイルにのみ影響するようです。diff ヘッダーに間違った情報が表示されていることに気付きました。

@@ -359,10 +367,12 @@ img.badge-pic {

 #sampleProfileCover {
   float: left;
-  width: 200px;
+  width: 230px;
+  height: 150px;
   text-align: center;
   img {
     width: 200px;
+    height: 220px;
   }
 }

ヘッダーがこのスタイルを として識別していることに注意してくださいimg.badge-pic。そのスタイルは、実際にはファイルのかなり前に表示されます。git が css/sass の解析に問題を抱えている可能性はありますか?

4

3 に答える 3

1

git push --forceこれは、競合するコミットをサーバーに送信した場合に発生する可能性があります。これ、他の競合するコミットのライターがすぐに強制コミットをプルしてマージする場合に機能します-彼はまだ自分のコミットをアタッチしており、プルすると彼の側で競合が表示されます( fsck を実行する場合を除いて、誰も気付かないでしょう- - 誰かがマージをやらなければならない. 忘却に押し込むだけでは解決策にはなりませんし、明らかに git のデフォルト設定は平均的な開発者向けではありません! そうすると、競合するコミットは脇に押しやられて、ヒントや呼び出し方法に結び付けられることなくぶらぶらします. git fsck を実行して確認できます。

$ git fsck
Checking object directories: 100% (256/256), done.
dangling commit 4f851a97274917a1486f81833c6e96c4b1efeabc

開発者が を使用できないようにすることもできますforce。解決策: リポジトリ構成ファイルに次を追加します。

[receive]
    denyNonFastForwards = true

http://randyfay.com/content/avoiding-git-disasters-gory-storyも参照してください

于 2013-03-20T06:34:04.290 に答える
1

ではgit、変更は自動的に元に戻りません。何も失わないように細心の注意を払っていますgit rebasegit push -f(早送りではないためにプッシュが機能しない場合に「機能するように」)、またはgit reset. 履歴の編集は危険です。git-scmにリンクされているいくつかのチュートリアルを読んでもらいます。

ワークフローを調べて、標準の git ワークフローおよび提案と比較します (いくつかあります)。Git はUnix の最高の伝統におけるツールであり、自分が何をしているかを知っているエキスパート ユーザーを対象としています。そのため、邪魔にならないようにし、ユーザーを再推測しようとしません。彼らがランクの初心者である限り、それは時々裏目に出ますが、彼らはすぐに学びます(または欲求不満であきらめます;-)。

于 2013-03-16T18:57:26.277 に答える
1

これはエディターの問題であると思われます。おそらく、元に戻すコミットに名前が記載されている開発者のテキスト エディターは、アップストリームからプルされた変更をロードしていないため、変更を保存、コミット、プッシュすると、テキスト エディターは Git から取り込まれたものを上書きしてしまいます。これは、元に戻されるのは 1 種類のファイルだけであるという事実によって、より妥当になります。

于 2013-03-18T05:04:53.207 に答える