2

現在の状況:

2 人の開発者が、Sprint1 というタイトルの同じリモートブランチで作業しています。

開発者 1: 2 つのファイルの一部のコードを変更し、コミット (誤って他の 3 つのファイルも追加) し、Sprint1 にプッシュします。

開発者 2: どういうわけか、開発者 1 もプッシュしたくない 3 つのファイルを誤って追加したことに気付きました。そこで彼は、開発者 1 の変更前のコミットに変更を逆マージします。

この時点で、開発者 1 は自分の 2 つのファイルを再度コミットし (まだ作業中の余分な 3 つではありません)、リモート ブランチ (Sprint1) にプッシュしようとしています。問題は、プルが Developers 1 のローカル ファイルを上書きし、5 つのファイルすべてのローカルの変更を効果的に「削除」することです。

開発者 1 が最新のヘッドに到達し、今回は変更を失うことなく正しいファイルをプッシュできるようにするための適切な方法は何ですか?

4

2 に答える 2

1

開発者 1 に現在のローカル編集で別のブランチを作成してもらい、ローカル ファイルの Sprint1 ブランチでプル リクエストを自分の Sprint1 ブランチ (作成した新しいブランチではない) に送信します。git rm次に、新しいブランチでコミットしたくない 3 つのファイルを実行し、そのブランチを Sprint1 にマージします。

于 2012-04-27T16:29:02.257 に答える
1

git の良いところは、一度コミットした内容を完全に削除するのはかなり難しいことです。これらのコミット (元のコミットとそれを元に戻したもの) の両方を削除し、変更を最初からコミットするためにリポジトリへの強制プッシュを実行したくない場合は、開発者 1 ができることがあります。

  1. git pull- わかりました、元に戻すコミットをプルし、そのような履歴があります:

    ca798ca revert 'commit1'
    cf76cf7 commit1
    

    さて、変更を「失いました」が、心配しないでください。次のステップで元に戻します。

  2. git revert -n HEAD(または明示的git revert -n ca798ca) revert コミットを元に戻します。これで、元のコミットからのすべての変更 (必要な変更と不要な変更の両方) がインデックスに含まれますが、まだコミットされていません (オプションのおかげです-n)。

  3. git reset HEADすべての変更をインデックスから作業ディレクトリに戻します。

  4. git add necessary_file && git commit -m 'necessary changes'必要な変更のみをインデックスに追加してコミットします。このコミットで不要なすべての変更は、作業ディレクトリに残ります。

  5. git push結果を同僚と共有します。

これらの手順は現状のままで提供されるため、上記の内容を理解できない場合は、実行する前に質問してください。そうしないと、事態がさら​​に混乱する可能性があります。

于 2012-04-27T16:38:28.387 に答える