1

これがシナリオです

GITに5つのバージョンのコードがあります。

Commit 1
Commit 2
Commit 3
Commit 4
Commit 5

今、私はコードに多くのコミットされていない変更があります。say commit 3コミットされていない変更を失うことなく、以前のバージョン()の1つを別の物理的な場所で取得したいと思います。

つまり、最新バージョンで作業しているときに、GITリポジトリに変更を加えずに、以前のバージョンで作業しているバージョンを提供したいと思います。

なぜ私は変更をコミットしたくなかったのか、私に聞かないでください。

私の質問の簡略版

GITでこのようなことはできますか?

svn export -r123 https://svnrepo C:/temp

ここで、123はバージョンであり、C:/Tempはターゲットの場所です。これはリポジトリに変更を加えないと思います!

4

3 に答える 3

2

必要なのは、作業を隠して、後で(現在の変更をコミットせずに)元に戻すことです。

一般的:

git stash
git checkout <commit>
- Do Something -
git stash apply

詳細については、これをお読みください。

編集:
@soulseekahが指摘したように、ローカルリポジトリを他の場所に複製でき、コミットされていないコードは複製されません。
そして、n番目のコミットを取得することに関して(たとえば、3コミット前):

git checkout HEAD~3
于 2012-12-05T09:48:04.987 に答える
2

誰か他の人に分岐してリポジトリで作業してもらうことを本当に探しているのであれば、おそらく探しているのは単純なことgit cloneです。これにより、作業中の変更を強制的にコミットすることはありません。

git clone /path/to/local/git-repo /path/to/local/new-git-repo

これにより、保留中の変更なしでリポジトリのクローンが作成されます。これは、ローカルとリモートの両方で機能します。次に、特定のコミットから開始したい人は、その新しいクローンを取得してcheckout -bresetまたはrebase(フローに最も適切な方)を使用します。

例として、あなたのクローンを手にした後、他の人がおそらく何をするかを次に示します。

cd /path/to/new-git-repo
checkout -b new-feature commit-1
# work work work
# commit

次に、あなたはgit pull /path/to/his/new-git/repo new-feature、または多分fetchcherry-pick誰が知っているでしょう。

結論として、上記に混乱して実行することを避けるために、共有のリモートオリジンが必要であるように思われます。これが問題を解決するための最良の方法です。

于 2012-12-05T09:54:39.267 に答える
0

GITに欠けている機能のようです。SVNの「エクスポート」と同じです。唯一の方法は、nThバージョンをチェックアウトしてからそれを取得し、マスターをもう一度チェックアウトすることです!

于 2013-07-23T11:32:04.197 に答える