3

svn では、興味がなくなった作業を含むブランチを削除することがよくありました。本当に必要になった場合は、将来いつでもそれらを復元できることを知っていれば安全です。

git では、これは不可能のようです。これは、「git branch -a」に約 50 個のブランチがあることを意味します。これを二度と使用することはないと思いますが、それらを永遠に失いたくありません。

バージョン管理された方法でブランチを削除する方法は本当にgitにはありませんか? アンチ git に聞こえなくても、古いブランチを元に戻せないような方法で破棄する必要がほとんどあるように git が設計されているのはなぜですか (私にはそう思われます)。これはバージョン管理の考え方に反しませんか。

4

6 に答える 6

3

1 つの可能性は、アーカイブしたいブランチのタグを作成してから、ブランチを削除することです。

git tag -a <tagname> <branchname>

次に、ブランチを復元したい場合は、タグから新しいブランチを作成できます。

git checkout -b <branchname> <tagname>

また、アーカイブされたすべてのブランチ タグがまとめられ、タグ リストの上部または下部に配置されるように、タグの命名スキームを開発することも役立つ場合があります。

于 2012-11-20T17:55:59.557 に答える
3

私が時々行うことの 1 つは、ブランチの名前をプレフィックスで変更することです。

git branch -m foo old/foo

他にできることは、保存したいブランチを別の裸の Git リポジトリにプッシュして保管し、ローカル リポジトリでそれらを削除することです。

git remote add archive /path/to/archive/repo.git
git push archive foo
git branch -D foo
于 2012-11-20T17:57:40.290 に答える
1

もう 1 つの可能性は、単に「デッド」ブランチの名前を変更することです。おそらくそれらの「名前空間」と組み合わせて使用​​します。たとえば、ブランチtopicbranch42が必要なくなったが、将来参照するために必要になる可能性がある場合は、次のようにします。

git checkout master # or any other branch that isn't topicbranch42
git branch -m topicbranch42 deprecated/topicbranch42

そうすれば、すべてのブランチを保持できますが、それらの名前は、それらがアクティブに開発/使用されていないことを明確に示しています

于 2012-11-20T18:37:43.110 に答える
0

私は今朝、これに対する正しい答えに気づきました:

.git/refs の下のすべては参照であるため、プルーニングされませんが、refs/heads のみがブランチであり、refs/tags はタグなどです。したがって、ブランチを「アーカイブ」refs ディレクトリにシャントするだけです。本当に強引な方法はmkdir -p .git/refs/archive/heads; mv .git/refs{,/archive}/heads/master、そのブランチの以前にアーカイブされたバージョンを踏みにじることです。より完全なバージョンは次のとおりです。

#!/bin/sh
# archive a branch, by committing it to .git/refs/archive/heads/
# to unarchive the branch, say 'git branch mybranch archive/heads/mybranch~'
# ---- NOIICE the parent link in the branch command above ----------------/
# any second parent of the archive ref is the previous archive header commit

getopts x x && set -x -v && shift

while test $# -ne 0; do
    branch="refs/heads/$1"
    archive="refs/archive/heads/$1"
    git rev-parse -q --verify "$branch" >&- \
    || { echo >&2 archive-branch ignored nonexistent branch: $1; shift; continue; }
    previously=`git rev-parse -q --verify "$archive"`
    git mktree </dev/null | xargs git commit-tree \
        -p "`git rev-parse "$branch"`" \
        ${previously:+ -p $previously} \
        -m "Parent is the archived tip of branch '$1'" \
        ${previously:+ -m 'Second parent is the previous commit like this one.'} \
    > "`git rev-parse --git-dir`/$archive"
    rm "`git rev-parse --git-dir`/$branch"
    shift
done
于 2013-01-08T18:11:26.743 に答える
-1

git ブランチを削除すると、コミットを参照するラベルが削除されるだけです。ハッシュをどこかに書き留めている限り、実行して削除されたブランチを回復
できます。git checkout <commit-hash>

実行git gcすると、これらの孤立したコミットが完全に削除されます。

于 2012-11-20T17:50:21.673 に答える