我正在使用git来管理我的项目,但是我对这类程序没有多少经验,所以我经常使用它们不正确(例如:我只在一次提交中提交了许多(不相关的)更改)。我想更好地使用它们。
顺便说一下,我注意到我开始开发一个更适合分支的项目扩展。所以从git gui我创建了一个新的分支,它是主人的副本。
现在我想将主服务器恢复到我做的最后一次提交,它与项目无关。我知道这个提交是什么,但我不知道如何将HEAD的所有提交还原到这个提交,我不知道这是否会影响分支(失去所有新工作将是一个真正的痛苦) ..)
那么,我该怎么办?
Ps:通常我使用git gui,但我使用git bash没有问题。我使用win7,我在eclipse中管理一个java android项目
2 个答案:
答案 0 :(得分:2)
如果您已创建分支,请更改回主服务器并使用git reset --hard commitid
将其重置为所需的提交。现在'master'设置为此提交,并且分支仍然指向您之前为其配置的提交。
分支名称是特定提交的引用或备用名称。 reset允许您更改引用指向的提交并强制工作树匹配(使用--hard)
答案 1 :(得分:2)
对master
分支的更改不会影响新分支的历史记录。
如果您想将master
的HEAD更改为特定提交,请使用reset:
git checkout master
git reset --hard <commit id>
如果您的事件序列是:
- 承诺大改变。
- 创建新分支。
醇>
你只想在上一次提交之前回复master
,使用reset:
git checkout master
git reset --hard HEAD^
如果您的事件序列是:
- 承诺大改变。
- 提交其他更改(应保留在
master
)。
- 创建新分支。
醇>
您只想从big change
删除master
提交,同时保留所有其他提交,请使用revert:
git checkout master
git revert <commit id>
如果您的事件序列是:
- 承诺大改变。
- 提交其他更改(也应从
master
中删除)。
- 创建新分支。
醇>
并且您要删除所有最近提交的内容,包括big change
中的master
,请使用reset:
git checkout master
git reset --hard <big change commit id>^