追加 リモート・リポジトリーの特定のバージョンの Git クローン




git 別リポジトリ コピー (7)

私は約1ヶ月前にリモートのgitリポジトリをクローンしました。 リモートリポジトリは多くの変更を受け、現在は不安定になっています。 今私は1ヶ月前にクローンしたものと同じバージョンのリポジトリの別のコピーが必要です。

これはどうすればいいですか?


集中管理されたバージョン管理システムとは違って、Gitはリポジトリ全体を複製するので、現在のリモートファイルだけでなく、すべての履歴を取得できます。 ローカルリポジトリには、これがすべて含まれます。

ある時点で特定のバージョンをマークするためのタグがあったかもしれません。 そうでない場合は、ローカルで自分で作成することができます。 これを行う良い方法は、 git logを使うか、おそらくgitk (おそらくgitk --all - すべてのブランチとタグを見るために)のようなツールでより視覚的に使うことです。 その時点で使用されたコミットハッシュを見つけることができる場合は、 git tag <hash>を使用してgit tag <hash>し、新しい作業コピー( git checkout -b new_branch_name tag_nameなど)でgit checkout -b new_branch_name tag_nameか、タグ名)。


おそらくgit resetあなたの問題を解決するでしょう。

git reset --hard -#commit hash-

あなたは次のようにそれを解決することができます:

git reset --hard sha

ここで、例: 85a108ec5d8443626c690a84bc7901195d19c446

次のコマンドで目的のshaを取得できます。

git log

必要なソースツリーはまだgitリポジトリ内で利用できますが、関心のあるコミットのSHA1が必要です。現在のクローンからSHA1を取得できると思いますか?

そのSHA1を手に入れることができれば、ブランチを作成したり、同じリポジトリを持つようにリセットすることができます。

Ruiの回答ごとのコマンド


git logを使用してロールバックするリビジョンを探し、コミットハッシュを記録します。 その後、2つの選択肢があります:

  1. そのリビジョンの後に何かをコミットする予定の場合は、新しいブランチにチェックアウトすることをお勧めします: git checkout -b <new_branch_name> <hash>

  2. もしあなたがそのリビジョンの後にコミットするつもりがないなら、ブランチなしで単にチェックアウトすることができます: git checkout <hash> - NOTE:これはあなたのリポジトリを 'detached 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.

そうすれば、情報が失われることはなく、安定したときに新しいリビジョンに移動することができます。


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 checkout  commithash

この順番で

git init    
git clone `URLTORepository`
cd `into your cloned folder`
git checkout commithash

コミットハッシュはこのようになります "45ef55ac20ce2389c9180658fdba35f4a663d204"





git-clone