繁体   English   中英

如何在git中的先前提交中回滚文件中的更改

[英]how to roll back changes in a file in a previous commit in git

我做了3个'git commit',但是我没有做过'git push'。

1. commit 1
2. commit 2
   touches fileA
   touches fileB
   touches fileC
3. commit 3

那我该怎么办

  1. 回退我对提交2在文件b中所做的更改? (由于我已经执行了“ git commit”,因此我无法再执行“ git checkout-fileB”操作,如何回滚更改?
  2. 在fileC中进行更改,使其像提交2的一部分? 我想我可以立即更改文件,然后运行'git rebase -i HEAD〜2'对吗?

这应该工作:

1. git rebase -i HEAD~2
2. in your editor, select the following:

edit 9b86592 commit 2
pick f3907cb commit 3

3. at this point roll back the changes you made in fileB, for example with
   `git checkout <version_you_want>` or by manually editing the file
4. make the changes in fileC you want to be part of commit 2
5. `git add fileB fileC`
6. `git commit --amend`
7. `git rebase --continue`

如果git尝试应用提交3时发生冲突,则可能需要解决合并问题。解决这些问题后, git rebase --continue再次运行git rebase --continue

使用git rebase -i HEAD~2并编辑第二个提交。

假设您在分支主服务器上并且有一棵干净的树:

# checkout incorrect commit
git checkout <sha1_of_commit2>

# revert the changes to fileB by checking out the parent version
git checkout HEAD^ -- fileB

# make an amended commit
git commit --amend

# go back to master
git checkout master

# transplant the changes since the bad commit onto the amended commit
git rebase --onto HEAD@{1} <sha1_of_commit2>

这就是我要做的。

检出旧版本的fileB并提交

git checkout HEAD~3 -- fileB
git commit -m"fix fileB" fileB

现在使用旧的提交重新定位到您的修复程序中

git rebase -i HEAD~3

现在将您最近的提交“ fix fileB”移到提交2之后,并将“ pick”指令更改为“ squash”,将提交更改的fileB与重新设置的提交一起加入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM