这是场景
我在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是目标位置。 我相信这不会对存储库进行更改!
答案 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 -b
,reset
或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
,或者fetch
和cherry-pick
知道。
总之,您似乎需要一个共享的远程源,以避免被上述操作混淆,这将是解决您问题的最佳方法。
答案 2 :(得分:0)
似乎是GIT中缺少的功能。就像SVN中的'export'一样。唯一的方法是查看nTh
版本然后再拿它,然后再次检查主人!