Git:如何签出提交并将其合并回我的分支?
我在我的分支机构中做了一系列的承诺。然而,最后3个左右是错误-我想“恢复”我的分支到以前的提交 通过谷歌搜索我了解的问题,我必须使用Git:如何签出提交并将其合并回我的分支?,git,git-commit,Git,Git Commit,我在我的分支机构中做了一系列的承诺。然而,最后3个左右是错误-我想“恢复”我的分支到以前的提交 通过谷歌搜索我了解的问题,我必须使用git log获取我想要返回的提交的ID,然后git checkout。但我找不到除此之外的信息 当我结账时,我似乎不再在我原来的分支机构内。如何合并回原始分支,从而撤消以前错误提交中的更改?如果您只是想添加一个新的提交,以恢复文件状态 首先,使用rm删除所有文件(小心不要删除.git/)。您也可以使用git rm-f,但请注意.gitignore更改 然后,从提交
git log
获取我想要返回的提交的ID,然后git checkout
。但我找不到除此之外的信息
当我结账时,我似乎不再在我原来的分支机构内。如何合并回原始分支,从而撤消以前错误提交中的更改?如果您只是想添加一个新的提交,以恢复文件状态 首先,使用
rm
删除所有文件(小心不要删除.git/
)。您也可以使用git rm-f
,但请注意.gitignore
更改
然后,从提交中获取所有文件(使用git日志获取提交SHA
):
在这里,星号被转义以防止外壳扩展。Git将进行扩展。如果您使用的是Unix shell,还可以使用单引号:
git checkout 1234567 '*'
提交获取的文件:
git add -A
git commit
瞧 当您从另一个分支创建一个分支时,如果创建了两行工作,可能会采用不同的行,那么在分支中当前无法查看提交的其他分支,因为它们是独立的,但是如果您在该分支中完成了工作,则假设称为“dev”,那么如果您要运行主分支(master)只有你应该确认你的stagin area marge你的分行如下:首先用
git branch
验证你的当前分行,显示当前分行的名称,然后转到mastergit checkout master
,最后是marge Branchsgit marge dev
(dev=Name\u你的分行)如果要完全删除最后一个要提交的文件和工作目录以与最后两个提交(HEAD~~)一致,则可以使用git log--graph来显示两个分支的所有日志:
git重置--硬头~~
但如果您不想修改提交历史记录(因为您想保留错误的提交,或者您已经将其推送到公共存储库),只需恢复到早期状态,但保留错误的提交,那么iBug的签出方法更好。
您的解决方案的问题是“git checkout不会移动分支指针,而只移动头指针,因此会进入分离的头状态。如果签出单个文件而不提交,那么指针将保留在其原始位置,因此以后不需要合并。
(对我的代码的一些解释:
上面的命令不仅移动HEAD指针,而且将主分支指针移回HEAD~~,并更新工作目录(和索引)以与commit HEAD一致~~
标题:当前提交
HEAD~:上一次提交
头~~
HEAD~~~…etc)无需签出的可能重复项-使用
git reset
或git revert
。无需查找提交ID-使用likeHEAD~2
。要从分离的头运行返回到分支,请运行git checkout$branch
,例如git checkout master
@phd:我想revert
是保存方法吗?我总是想知道为什么人们总是建议先reset
。@Christophrevert
创建过多的提交,使用amend/rebase/reset
编辑历史记录允许有干净的历史记录。当然,你必须了解你在做什么,所有的优点和缺点。
git add -A
git commit