1

私は Git で間違ったリベースと競合解決を行ったので、このばかげた状況に陥りました。

*   8379515 (HEAD, origin/master, origin/HEAD, master) Merge branch 'binary-mobile'
|\
| * 21b247a (binary-mobile) Add Binary Mobile
| * c66dced Add Music Collection
* | cbbe364 Add task Music Collection
|/
* 8e9ccae Update README.md
* 31d2050 Reorganize repo and add README files
* 88fe4fd Rename readme file
* 8ed72bd Reorganize the structure of the repo
* 219a25a Update README.md
* 60921e6 Create README.md
* 1de4f36 Initial commit

私の問題は、コミットAdd task Music CollectionAdd Music Collection同じであることです。したい:

  • ブランチに単一のパスをたどらせます。
  • タイトルのコミットは 1 つだけAdd Music Collectionです。

私はただやってgit rebase -i 8e9ccaeから、押しつぶしc66dcedcbbe364に名前cbbe364を変更できAdd Music Collectionますか?そもそもの問題は、リベースしたいコミットをGithubにプッシュしたことだと思いますが、他の誰もそれらで作業していない限り、これは大丈夫だと思いましたか?

4

3 に答える 3

3

この問題で立ち往生する場合は、次のことを行います。

cbbe3641.) (排他的) と21b247a(包括的)の間のコミットを にリベースします8e9ccae

git rebase --onto 8e9ccae cbbe364 21b247a

これにより、コミットがc66dced21b247a直接移動し8e9ccaeます。これにより、最新のコミットの別のハッシュ値になりますAdd Binary Mobile、ハッシュ値を 'commit2' と呼びましょう (ツリーは 100% 正確ではない可能性があり、それを再現するための git リポジトリはありません)

*   8379515 (HEAD, origin/master, origin/HEAD, master) Merge branch 'binary-mobile'
|\
| * 21b247a (binary-mobile) Add Binary Mobile
| * c66dced Add Music Collection
| | cbbe364 Add task Music Collection
|/
|
|
| * commit2 (HEAD) Add Binary Mobile
| * commit1 Add Music Collection
|/
* 8e9ccae Update README.md
* 31d2050 Reorganize repo and add README files
* 88fe4fd Rename readme file
* 8ed72bd Reorganize the structure of the repo
* 219a25a Update README.md
* 60921e6 Create README.md
* 1de4f36 Initial commit

2.) その後、master下 (「ツリー」の下)に移動しcommit2ます。

git branch -d master
git checkout commit2
git branch master

| * commit2 (HEAD, master) Add Binary Mobile
| * commit1 Add Music Collection
|/
* 8e9ccae Update README.md

3.) これmasterで、それが属する場所、つまり on ができましたcommit2。「単一行」でブランチをたどりたい場合は、ブランチを削除する必要がありますbinary-mobile。削除するだけです。

git branch -D binary-mobile

コミット21b247aにはブランチ名がなく、このブランチ (HEAD なし) で作業していないため、ブランチは消えます。

4.) 最後に変更をプッシュします (この場合は強制が必要です)。これにより、origin/master下に移動masterし、マージ ブランチが消えるはずです。

git push master --force


* commit2 (HEAD, master, origin/master) Add Binary Mobile
* commit1 Add Music Collection
* 8e9ccae Update README.md
* 31d2050 Reorganize repo and add README files
* 88fe4fd Rename readme file
* 8ed72bd Reorganize the structure of the repo
* 219a25a Update README.md
* 60921e6 Create README.md
* 1de4f36 Initial commit
于 2013-11-20T09:48:33.177 に答える
1

私が正しく理解している場合は、間違ったことを確認して元に戻すだけです。

git reflog( See here ) を使用すると、git リポジトリで作成したすべての履歴を確認できます。これらの変更はすべて git に保存されるため、過去 2 か月間のリポジトリの状態に戻ることができます。

git reset --hard HEAD@{NumberOfTheChange}( See here ) を使用 すると、リポジトリの変更を元に戻すことができます。(ただし、この方法では、git によって追跡されていないファイルの変更を元に戻すことができないことに注意してください)

この後、やりたいことができます。

于 2013-11-20T09:29:09.783 に答える