15

編集質問は「git rebaseタグもリベースするように指示できますか?」に要約されます。しかし、元の質問への回答も役立ちます。


過去をgitリポジトリに追加する方法を尋ねていますか? 私はこれらの指示に従いました。< edit >その後、スナップショットのみにあったファイルを含めるようにリベースしました。こちらを参照してくださいそれらを新しいものに移動したい。タグを使用するスクリプトを作成できるように、タグ付きのすべてのコミット メッセージを一意に作成したと思いますが、より一般的な方がよいでしょう。git filter-branchgit rebasegit move-tags <from> <to>

それで、「古いタイムラインの後のN番目のコミットがタグ付けされるように、新しいタイムラインのNコミット後のコミット」に対処する方法はありますか? 明らかな手動の再タグ付け以外の他のソリューションも素晴らしいでしょう。

(その恐ろしく長い文を平易な英語に直してください...)

*)ちょっと、git は祖父のパラドックスを解決しました!

4

5 に答える 5

9

これを行うスクリプトを作成しました。

$ git-rebase-tags master
Rebasing 107 tags onto 'master'
Can't rebase tag 'staging-deploy-01' because there are no identical commits on 'master'
Pointed tag 'v0.0.11' at commit 81e16f2ca1bc7802547bf19c1dba1a68212eafff
Pointed tag 'v0.0.12' at commit 17051cc28084dd56ae56e96767bceee46217c02d
Pointed tag 'v0.0.13' at commit 5d795076ba4b33f81d327dcf9bff727cef7771a2
[...]

gist.github.com/908381を参照してください。

しかし、さらに良いのは、--tag-name-filtergit-filter-branch(1) に組み込まれているオプションを使用することです。

于 2011-04-07T18:33:31.093 に答える
3

git を使用してやりたいことを行う組み込みの方法はありません。「git rebase --tags」は興味深いかもしれませんが、存在しません。

あなたが言うようにコミットメッセージが同一である場合、refs/tags の各タグを調べることができます:

'git log -1 --pretty=oneline <tagname>'

コミット メッセージを完全なリストと比較します。

'git log --pretty=oneline <newbranches>'

一致が見つかった場合 (および SHA1 ハッシュが異なる場合) は、次のようにします。

'git tag --force <tagname> <new SHA1>'
于 2010-07-01T13:10:31.163 に答える
2

Thomas Rast(http://git.661346.n2.nabble.com/Rebase-with-tags-td5582971.html )によると:

LeonidPodolnyは次のように書いています。

少なくとも、(古いコミット、新しいコミット)ペアのセットを受け取ることは可能ですか?それで、私はそれを行う小さなスクリプトを書きますか?

書き換え後のフックはこのリストを取得するため、必要に応じて使用できます。

于 2012-03-12T13:00:08.063 に答える
2

この回答で説明されているように、オプションgit filter-branchを使用して変更されたタグを自動的に更新する方法があります。--tag-name-filter

于 2015-06-11T20:33:52.063 に答える