約1か月前にリモートgitリポジトリのクローンを作成しました。リモートリポジトリは多くの変更が加えられ、現在は不安定になっています。ここで、リポジトリの別のコピーが必要です。これは、1か月前に複製したものと同じバージョンです。
どうすればよいですか?
リポジトリを任意のコミットに「リセット」できます(たとえば、1か月前)。
そのためにgit-resetを使用します。
git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
簡単に使用できます
git checkout commithash
この順序で
git clone `URLTORepository`
cd `into your cloned folder`
git checkout commithash
コミットハッシュは次のようになります「45ef55ac20ce2389c9180658fdba35f4a663d204」
git log
ロールバックするリビジョンを見つけるために使用し、コミットハッシュをメモします。その後、2つのオプションがあります。
その改訂後に何かをコミットする予定がある場合は、新しいブランチにチェックアウトすることをお勧めします。git checkout -b <new_branch_name> <hash>
そのリビジョン以降に何もコミットする予定がない場合は、ブランチなしでチェックアウトできます。-git checkout <hash>
注:これにより、リポジトリは「切り離されたHEAD」状態になります。つまり、現在どのブランチにも接続されていません。新しいコミットを実際のブランチにマージするための追加の作業があります。
例:
$ git log
commit 89915b4cc0810a9c9e67b3706a2850c58120cf75
Author: Jardel Weyrich <suppressed>
Date: Wed Aug 18 20:15:01 2010 -0300
Added a custom extension.
commit 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Author: Jardel Weyrich <suppressed>
Date: Wed Aug 18 20:13:48 2010 -0300
Missing constness.
$ git checkout 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Note: moving to '4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7'
which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 4553c14... Missing constness.
そうすれば、情報が失われることはなく、安定したときに新しいリビジョンに移行できます。
取得する必要のあるバージョンがブランチまたはタグの場合、次のようになります。
git clone -b branch_or_tag_name repo_address_or_path
一元化されたバージョン管理システムとは異なり、Gitはリポジトリ全体のクローンを作成するため、現在のリモートファイルだけでなく、履歴全体も取得できます。ローカルリポジトリには、これらすべてが含まれます。
当時、特定のバージョンをマークするタグがあった可能性があります。そうでない場合は、ローカルで作成できます。これを行うための良い方法は、(おそらくすべてのブランチとタグを表示するために)のgit log
ようなツールを使用するか、おそらくより視覚的に使用することです。その時点で使用されていたコミットハッシュを見つけることができる場合は、を使用してそれらにタグを付けてから、新しい作業コピーでそれらをチェックアウトできます(たとえば、タグ名の代わりにハッシュを使用して直接)。gitk
gitk --all
git tag <hash>
git checkout -b new_branch_name tag_name
あなたはこのようにそれを解決することができます:
git reset --hard sha
ここで、sha
例:85a108ec5d8443626c690a84bc7901195d19c446
次のコマンドを使用して、目的のshaを取得できます。
git log
uploadpack.allowReachableSHA1InWant
Git 2.5.0以降、この構成変数はサーバーで有効にできます。ここでは、GitHub機能リクエストとGitHubコミットでこの機能を有効にします。
Bitbucket Serverは、バージョン5.5以降で有効になりました。
使用法:
# Make remote with 4 commits, and local with just one.
mkdir server
cd server
git init
touch 1
git add 1
git commit -m 1
git clone ./ ../local
for i in {2..4}; do
touch "$i"
git add "$i"
git commit -m "$i"
done
# Before last commit.
SHA3="$(git log --format='%H' --skip=1 -n1)"
# Last commit.
SHA4="$(git log --format='%H' -n1)"
# Failing control without feature.
cd ../local
# Does not give an error, but does not fetch either.
git fetch origin "$SHA3"
# Error.
git checkout "$SHA3"
# Enable the feature.
cd ../server
git config uploadpack.allowReachableSHA1InWant true
# Now it works.
cd ../local
git fetch origin "$SHA3"
git checkout "$SHA3"
# Error.
git checkout "$SHA4"
必要なソースツリーは引き続きgitリポジトリ内で利用できますが、関心のあるコミットのSHA1が必要になります。現在のクローンからSHA1を取得できると思いますか?
そのSHA1を取得できる場合は、そこにブランチを作成/リセットして、同じリポジトリを作成できます。
Ruiの答えによるコマンド
おそらくgit reset
あなたの問題を解決します。
git reset --hard -#commit hash-