1. ホーム
  2. git

[解決済み] Git コミット間の行き来をする方法

2023-08-31 15:57:03

質問

Gitについて、初歩的な質問です。

あるブランチの履歴を行ったり来たりする必要があります。 つまり、すべてのファイルをある古いリビジョンにあった状態にし、それからリポジトリの最新の状態に戻す必要があるのです。コミットする必要はありません。

SVNでは、次のようになります。

svn up -r800

でリビジョン800まで、そして

svn up

を実行して、リポジトリと同期させる。

戻りたいコミットのハッシュはわかっているので、試しに

git reset <hash>

で、そこに到達するようです。しかし、その後、私は試してみました

git pull

が、これはコンフリクトを訴えます。

では、ブランチの履歴を移動する適切な方法は何でしょうか?

私はSVNの観点から考えているので、何か良いチュートリアルを紹介してくれるのを躊躇しないでください。なお、私はすでに http://git.or.cz/course/svn.html http://www.youtube.com/watch?v=8dhZ9BXQgc4 .

ありがとう、オンドラ。

どのように解決するのですか?

私も元svnユーザーで、今はすべてのプロジェクトでgitを使っています。

gitを使う場合、svnで使われているクライアント・サーバ・アーキテクチャから考え方を変える必要があります。svn では、すべての変更にサーバーとの接続が必要です。gitでは、リポジトリは作業ディレクトリの中にあります。レポのアクションのたびに接続する必要はありません。

のみを使用します。 git pushgit pull でレポと同期させます。rsyncや他のバックアップソリューションを使って、2つの場所に全く同じコンテンツを持たせるようなものだと考えてください。ちょうど、外付けのバックアップ用ハードディスクを接続し、その中のコンテンツをメインのコンテンツと同じにするようなものです。これは git pullgit push .

履歴を遡りたいだけなら git checkout . リビジョン ID を見るには git history . Linux を使っている場合は gitk を使って、リビジョンツリーを見ることができます。Windows では、tortoise git はリビジョングラフを使用して表示することができます。

最新のリビジョンに戻るには git checkout master . 何かコマンドを実行する前に、必ず git status . このコマンドは、現在のレポの状態について知っておくべきこと、そしてそれを正しくするために必要なアクションを表示します。コマンドを実行する前に git pullgit push を作るのがよいでしょう。 git status の結果は、テキストを含む working directory clean .

ファイルを以前のリビジョンに戻す必要がある場合、それを行うには git merge . これをファイルに実行する前に、最初に git diff . 例 git diff rev1:rev2 filename . 2つのリビジョン間の差分を出力します。rev1 の変更は rev2 の変更に置き換えられます。つまり、revert を行うには、rev2 が rev1 よりも古いことになります。diff の結果に満足したら、次のようにしてください。 git merge で行う場合、単に diffmerge で、他のすべてのパラメータは同じままです。

これがあなたの助けになることを願っています。主なキーは、作業ディレクトリがあなたのレポであることを確認することです。これを理解することで、git の能力をフルに発揮することができます。幸運を祈ります。