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 Push
とgit pull
のみを使用して、レポと同期します。 rsyncまたは任意のバックアップソリューションを使用して、2つの場所にまったく同じコンテンツを持たせるように考えてください。外部バックアップハードディスクを接続するように、その中のコンテンツをメインのコンテンツと同じにします。それがgit pull
とgit Push
の使用法です。
単に履歴を行き来したい場合は、git checkout
を使用して行ってください。 git history
を使用してリビジョンIDを参照してください。 Linuxを使用している場合は、gitk
を使用してリビジョンツリーを表示します。 Windowsでは、亀Gitはリビジョングラフを使用して表示できます。
最新のリビジョンに戻すには、git checkout master
を使用します。コマンドを実行する前に、必ずgit status
を実行してください。このコマンドは、現在のレポ条件について知る必要があるもの、およびそれを正しくするために必要なアクションを表示します。 git pull
およびgit Push
を実行する前に、git status
結果にテキストworking directory clean
が含まれていることを確認することをお勧めします。
ファイルを以前のリビジョンに戻す必要がある場合は、git merge
を使用してファイルを復元できます。ファイルに対して行う前に、最初にgit diff
でテストしてください。例:git diff rev1:rev2 filename
。 2つのリビジョン間で異なる内容が出力されます。 rev1の変更は、rev2の変更に置き換えられます。戻すには、rev2がrev1よりも古いです。 diffの結果に満足したら、git merge
でそれを行い、diff
をmerge
に置き換えるだけで、他のすべてのパラメーターは同じままです。
これがあなたのお役に立てば幸いです。主な鍵は、作業ディレクトリがリポジトリであることを確認することです。これを理解すると、gitを最大限に活用するのに役立ちます。がんばろう。
git checkout
を使用してコミットをチェックアウトし、ブランチ名で使用して名前付きブランチに戻ることができます。
git checkout
ブランチ名ではなくコミットIDを使用すると、名前付きブランチからデタッチドヘッドと呼ばれるものに移動します。
git reset
を使用すると、ブランチ自体が古い状態に戻り、最近のコミットが孤立する可能性がありますが、これはおそらく望んでいないものです。
他の答えは有益ですが、私はこれがOPが望むものに最も近いと信じています:
〜/ .bashrcに次の2つの関数を追加します。
# checkout prev (older) revision
git_prev() {
git checkout HEAD~
}
# checkout next (newer) commit
git_next() {
BRANCH=`git show-ref | grep $(git show-ref -s -- HEAD) | sed 's|.*/\(.*\)|\1|' | grep -v HEAD | sort | uniq`
HASH=`git rev-parse $BRANCH`
PREV=`git rev-list --topo-order HEAD..$HASH | tail -1`
git checkout $PREV
}
使用法:
$ git_prev
Previous HEAD position was 7042c8a... Commit message2
HEAD is now at d753ecc... Commit message1
$ git_next
Previous HEAD position was d753ecc... Commit message1
HEAD is now at 7042c8a... Commit message2
注:これらのコマンドは常に detached HEAD 状態に入ります。現在チェックアウトされているブランチからgit_prev
を実行してからgit_next
を実行すると、最新のリビジョンに戻りますが、HEAD状態になります。通常に戻るにはgit checkout BRANCH_NAME
を実行します。
git reflog
、これは、コミット間で切り替えるために行ったコミットとチェックアウトをリストします。以前のコミットへのチェックアウト時に失ったコミットも含みます。
その後、git checkout <hash of a commit>
そのコミットに切り替えます。
お役に立てれば!
ファイルの異なるバージョンをチェックアウトするには、次を使用します
git checkout rev -- filename
revは、コミットのID、ブランチの名前、タグの名前、または相対バージョンです。
git log
、gitk
を使用して、バージョンを調べ、必要なファイルのバージョンを確認します。
このバージョンのファイルを永続的にするには、ファイルをコミットする必要があります:git add filename; git commit filename
git pull
はマージを行うため、バージョンを調べることはお勧めしません。現在の状態を変更する可能性があります。
この場合、git reset
を使用する必要はありません。ただし、コミットしないことを決定したファイルをgit add
しない限りは。