从GIT本地回购中获取第n个提交/版本

时间:2012-12-05 09:42:50

标签: git version

这是场景

我在GIT中有5个版本的代码。

Commit 1
Commit 2
Commit 3
Commit 4
Commit 5

现在我在代码中有很多未提交的更改。我希望在不同的物理位置获得早期版本之一(say commit 3),而不会丢失未提交的更改。

换句话说,在处理最新版本时,我想给一些早期工作版本,而不对GIT仓库进行任何更改。

请不要问我,为什么我不想提交修改。

我的问题的简化版

我可以在GIT中做这样的事情吗?

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

其中123是版本,C:/ Temp是目标位置。 我相信这不会对存储库进行更改!

3 个答案:

答案 0 :(得分:2)

你想要的是藏匿你的工作,然后再回到它(没有提交当前的更改)。

一般来说:

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

阅读this了解更多信息。

修改
正如@soulseekah指出的那样,您可以将本地存储库克隆到其他位置,并且未提交的代码将不会克隆。
至于获得第n次提交(例如3次提交):

git checkout HEAD~3

答案 1 :(得分:2)

如果您真的希望简单地让其他人分支并在您的存储库上工作,那么您可能正在寻找的是一个简单的git clone。这不会强迫您提交任何工作更改。

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

这将在没有待定更改的情况下克隆您的存储库。这将在本地和远程工作。然后,想要从特定提交开始的人将获得该新克隆,并使用checkout -bresetrebase(以您的流程中最合适的为准)。

作为一个例子,这是另一个人在抓住你的克隆后可能会做的事情:

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知道。

总之,您似乎需要一个共享的远程源,以避免被上述操作混淆,这将是解决您问题的最佳方法。

答案 2 :(得分:0)

似乎是GIT中缺少的功能。就像SVN中的'export'一样。唯一的方法是查看nTh版本然后再拿它,然后再次检查主人!