【发布时间】:2011-10-01 22:39:12
【问题描述】:
我正在“事后记录”应用程序开发的历史,方法是移动项目目录树的现有快照(当时通过普通和原始文件夹副本保存,而不是 git 或任何其他版本控制)到 git。
在努力学习 git 的新概念和新术语之后,这个迁移过程似乎进展顺利,突然我发现:“糟糕……我上一个 git commit + git branch <branchname> 跳过了一个快照。 "
由于提交快照的顺序对我来说很重要,我想完全撤消最后一个git commit + git branch <branchname>,好像它从未完成过。
即“通过修改提交来修复”,如 Git 书籍中 Undoing in Git 章节底部的定义。
一切仍然是本地的(我没有“发布”也没有“推送”任何东西),所以我相信这符合关于“重写历史”的警告。 :)
您能否根据我的理解确认或更正以下所需的步骤?
- 清空工作目录(没有
删除
.git子目录, 当然) -
git checkout <folder-name>(将工作目录带回 紧随其后的状态 我提交了错误的文件夹和 通过 git 分支标记它) git branch -D <branchname-of-mistaken-folder-commit>git commit --amend
此时我希望 git 不再记得最后一个分支和提交已经完成,并且工作目录包含错误的文件夹(我将删除它,完全替换为我跳过的那个)。这是正确的吗?
【问题讨论】:
-
您似乎混淆了分支和标签。如果要为提交创建永久标记,请使用
git tag。 -
@svick 当我真正的意思是
时,我错误地犯了将 参数标记为 的罪行。感谢 +1 指出这一点。 -
在这种情况下,为什么要为每次提交创建新分支?我可以理解为它们创建标签(例如,如果每个快照代表编号版本),但不是分支。
-
@svick 我最近似乎错误地提交了太多...... :) 回答你的问题,我是一个来自多年 CVS 的 git 新手,创建一个新分支是我 @987654331 的方式@-ing 他们。目标是给每个这样的提交一个名称,以便我可以用我当时给它的快照的名称来识别它。我不认为我会分出一个较旧的分支,但到目前为止,这对我来说效果很好。然而,我总是很高兴学习更好的方法。 +1。
标签: git git-branch git-commit