2

git で特定のバージョンを取得し、現在のバージョンとしてコミットしようとしています。次のシナリオ例を検討してください。

tag : v2 (current version)
files : 1.txt,2.txt,3.txt

tag : v1
files : 55.xml,33.yml

タグ v1 に切り替えて現在のバージョンにしようとしています (この特定のバージョンを取得します)

Webを検索することで、すべてのファイルを取得する方法を見つけることができました

git checkout tag_name
# ex. git checkout v1

これにより、実際に特定のバージョンからファイルが取得され、作業ディレクトリに読み込まれます。

しかし、既存のファイルをコミットしてサーバーにプッシュすることはできません。

(プッシュしようとすると、保留中の変更がないように表示されます)

4

3 に答える 3

0

変更がないため、保留中の変更は表示されません。masterリモコンで を指すようにする場合は、リモコンでまたはv1を実行できます。と同じツリーを持つ の子である新しいコミットを作成する場合は、. やりたいことは具体的に何ですか?リモートは裸のレポですか、それとも作業ディレクトリですか? 前者の場合は何もせず、 でファイルを見たい人は checkout する必要があります。後者の場合は、リモートでチェックアウトするだけで、新しいコミットは行わないでください。update-refresetv2v1mergev1v1v1

あなたのコメントから、タグと同じファイル コンテンツを持つリモート リポジトリに新しいコミットを作成したいようですv1update-refリモートリポジトリで を使用して にリセットするのが本当に最善ですv1が、新しいコミットを行うことは確かに可能です。1 つのアプローチは次のとおりです。

git reset $( echo 'Resetting repo to v1' | git commit-tree $(
    git show -s --format='%T' v1 ) -p v2 )

これは のツリーを計算し、v1その引数を指定して commit-tree を呼び出しv2、コミット ログ「Resetting repo to v1」を使用して、親が (または HEAD を使用するか、新しいコミットの親にしたいものを使用して)新しいコミット オブジェクトを作成します。次に、リポジトリをリセットして、HEAD が新しいコミットを指すようにします。これを行った後、リポジトリにプッシュできるはずです。単純にpull古いツリーにマージする方が簡単かもしれませんが、競合を解決するためにかなりの手作業が必要になる場合があります。

于 2012-06-18T13:12:13.027 に答える
0

タグがあるので、タグをブランチにチェックアウトする必要があります。

git checkout -b v2 branch_v2

これにより、タグ v2 のプロジェクトの状態が branch_v2 という名前のブランチにチェックアウトされます (任意の名前を付けることができます)。

于 2012-06-18T13:10:30.940 に答える