4

これが私の git リポジトリの現在の状態です (GitX で視覚化)。

分岐した git 履歴

'34e...' と 'c3d...' コミット ('Implemented a global...' コメント付きのもの) は同一です。これを git diff で確認したところ、コミット時間も同じでした! 唯一の違いは、SHA です。

レポをどのようにしてこの状態にしたのかわかりません。私は git プロではありませんが、しばらくの間それを使用しており、すべての基本に非常に慣れてきました。これは突然発生したもので、以前に使用したことのない git 機能やワークフローを試していなかったので、かなり混乱しています。

他の誰もリモートに何もコミットしていないので、そこで履歴を変更できますが、それを含まない解決策がより良いでしょう.

マスターとオリジン/マスターの通常のマージまたはリベースを行うこともできますが、履歴に2つの同一のコミットが表示されるため、不快です。

origin/master をチェックアウトしてから、'a4a...' で始まるすべてのコミットを origin/master にリベースし、master をこの新しい HEAD に切り替えることは可能ですか? (基本的に、'c3d...' コミットを単独でぶら下げたままにします。

1) それで、これを修正する好ましい方法は何ですか?
2) これがどのように起こったのか、何か考えはありますか? 他に前に見た人いますか?

編集:
git diff c3db784817 34e1ab666a : 何も出力されませんでした。

git reflog マスター:

Bender:mt-d-styles tyson$ git reflog master 9579294 master
@{0}: commit: デバッグのみのコンソール印刷をテスト イメージ ビューに
追加しました
@{2}: commit: c3db784 を自動的に適用する新しい StyledRootElement を追加しました
master@{3}: commit: すべての存在をスタイリングするためのグローバル手法を実装しました
34e1ab6 master@{4}: commit: すべての存在をスタイリングするためのグローバル手法を実装しました
8519fb1 master @{5}: commit: remove メソッドを拡張して、発信者が
30aeee6 master にアクセスできるようにしました@{6}: commit: 新しいファクトリ メソッド ベースの Side Swipe View con を追加しました

git reflog オリジン/マスター:

Bender:mt-d-styles tyson$ git reflog origin/master
34e1ab6 refs/remotes/origin/master@{0}: プッシュで更新
8519fb1 refs/remotes/origin/master@{1}: プッシュで更新
495e0ef refs/remotes /origin/master@{2}: プッシュによる更新
c5fec81 refs/remotes/origin/master@{3}: プッシュによる更新
cba1e0f refs/remotes/origin/master@{4}: プッシュによる更新
9ee1ffb refs/remotes/origin /master@{5}: プッシュによる更新
68ee429 refs/remotes/origin/master@{6}: プッシュによる更新
0e2d199 refs/remotes/origin/master@{7}: プッシュによる更新
8a4de84 refs/remotes/origin/master @{8}: プッシュによる更新

編集 2:
git log --format=raw --decorate --graph --all :

*  commit c3db7848171f396c5a595a35dd6b609c119f9e84 
| tree 998e9749546d05178798c8a462d3eff02a111f4c 
| parent 8519fb17e77b8ae865e071772ae652316df8822a 
| author Tyson <tyson> 1364529327 +0800 
| committer Tyson <tyson> 1364539365 +0800 
|  
|     Implemented a global technique for styling all existing MT.D element backg 
|  


| * commit 34e1ab666a81dde7582ee9e31bfa961420d38f55 (origin/master) 
|/  tree 38f9e0c3d936c702fdcd18d215a2f0a88280893b 
|   parent 8519fb17e77b8ae865e071772ae652316df8822a 
|   author Tyson <tyson> 1364529327 +0800 
|   committer Tyson <tyson> 1364529327 +0800 
|    
|      Implemented a global technique for styling all existing MT.D element bac 
|
4

1 に答える 1

6

原因: 履歴の書き換えを行った可能性があります。コミットがまったく同じである場合、SHA は自動的に同じになります。UI に表示されるのはコミット日ではなく、作成日です。実行git log --format=raw --decorate ̵-graph --allして詳細を取得します。ローカル バージョンのコミット日が後日になっていることがわかると思います。これは、履歴の書き換え、通常は修正またはリベースによって引き起こされます。

解決策: 元に戻す方法がわかっている場合は、リベースでプルしてみてください。コミットが本当に同一である場合、gitこれを認識して、コミットを 1 つだけ追加する必要があります。元に戻す方法がわからない場合は、c3db784817 でカットして にリベースmasterします。origin/master

git rebase --onto origin/master c3db784817 master

@コメントでの質問:

あなたがreflogから修正したことをどのように知っていますか:

c3db784 master@{3}: commit: Implemented a global technique for styling all exist
34e1ab6 master@{4}: commit: Implemented a global technique for styling all exist

34e1ab6コミットを作成した後、マスター ブランチは にありました。次に、このコミットをプッシュしました。次に、マスター ブランチがc3db784– 同じメッセージのコミットに移動し、git クライアントは、この理由はcommit. 間に枝頭の動きがなかったので、これは修正のようなにおいがします。ただし、コマンドラインクライアントは言うでしょうcommit (amend)

そして、あなたのログは、最初のコミットを unix 時間1364529327(2013-03-28 20:55:27) に行い、その後 unix 時間 (2013-03-28 23:42:45) に修正したことを示してい1364539365ます。(そして、あなたはおそらく米国に住んでいます;)

于 2013-03-30T00:23:49.860 に答える