2

私にとってGitrebaseは、線形の履歴を取得するための良い方法ですが、最近、その動作について少し混乱しました。状況は、ローカル リポジトリ、GitLab のオリジン リポジトリ、およびコースの読み取り専用アップストリーム リポジトリを持っているということです。

基本的に、TA はアップストリーム リポジトリでドキュメントとコードをリリースします。私はそれを取得して自分のリポジトリにマージし、ラボを終了します。これは繰り返しのプロセスです。lab2 は、lab1 を終了してオリジンにプッシュした後にリリースされます。この反復では、混乱することが起こります。

lab3 がリリースされた後、master(lab1 と lab2 のコードを含む) を にリベースしましupstream/masterたが、コミットがすべて git 履歴の最新の場所にまとめられていることがわかりました。

lab1-TA-release -> lab2-TA-release -> lab3-TA-release -> lab1-my-code (リベース時間あり) -> lab2-my-code (リベース時間あり)

私の仕事の軌跡を示すのはコミット時間だと思うので、私が見たいのは次のような線形の履歴です:

lab1-TA-release -> lab1-my-code -> lab2-TA-release -> lab2-my-code -> lab3-TA-release

私の願いを叶える方法はありますか?

- - -アップデート - - -

たとえば、lab2 が終了し、lab3 が にリリースされましたupstream/masterlab3-TA-releaseはローカル マスターにありません (そのため、単純に使用rebaseして自分の をリゾートすることはできませんmaster)。私はgit rebase upstream/master最初にする必要があります。ここmy lab2-my-codelab1-my-code集まって、新しい時間でリフレッシュしました。そのため、実際のコミット時間 (仕事を終えたとき) が消えてしまい、混乱してしまいました。

コミットの元の時間 (リアルタイムを意味する) を自動的に予約して線形にする方法はありますか?

4

2 に答える 2

0

わかった!

私が行ったテストはすべて間違った方向に進んでいました。私自身の質問に答えて、通りすがりの人に情報を提供したいと思います。

lab2 が終了し、lab3 が にリリースされたとしupstream/masterます。lab3-TA-release私のローカルマスターにはありません。

最初のことは

$ git fetch upstream/master
$ git checkout upstream/master

そして今HEADは切り離されているので、実行するだけです

$ git rebase master

に。rebase upstream/master_master

次に、新しい一時ブランチを作成して変更を保存することが重要HEADです。他のブランチにチェックアウトするだけでは、変更はなくなります。

$ git branch temp
$ git checkout master
$ git merge temp

そして、物事はすべて設定されますmergefast-forward

temp次に、ブランチを削除するだけです

$ git branch -d temp
于 2020-11-27T04:28:24.263 に答える