Ste*_*han 408
git cherry-pick <original commit sha>
将制作原始提交的副本,实质上是重新应用提交
恢复还原将执行相同的操作,并提供更复杂的提交消息:
git revert <commit sha of the revert>
这些方法中的任何一种都可以在git push不覆盖历史记录的情况下使用,因为它会在还原后创建新的提交.
键入commit sha时,通常只需要前5个或6个字符:
git cherry-pick 6bfabc
Ada*_*ruk 339
如果你尚未推动这一改变, git reset --hard HEAD^
否则,恢复还原完全没问题.
另一种方式是git checkout HEAD^^ -- .然后git add -A && git commit.
Nes*_*aev 22
还原提交就像git中的任何其他提交一样.意思是,您可以将其还原,如:
git revert 648d7d808bc1bca6dbf72d93bf3da7c65a9bd746
Run Code Online (Sandbox Code Playgroud)
这显然只有在推动更改后才有意义,特别是当您无法强制推送到目标分支时(这对您的主分支来说是一个好主意).如果没有推送更改,只需按照其他帖子进行挑选,还原或简单地删除还原提交.
在我们的团队,我们有一个规则使用还原上都致力于在主要分支还原的意见,主要是为了保持历史的清洁,这样就可以看到其呈交恢复的内容:
7963f4b2a9d Revert "Revert "OD-9033 parallel reporting configuration"
"This reverts commit a0e5e86d3b66cf206ae98a9c989f649eeba7965f.
...
a0e5e86d3b6 Revert "OD-9055 paralel reporting configuration"
This reverts commit 648d7d808bc1bca6dbf72d93bf3da7c65a9bd746.
...
Merge pull request parallel_reporting_dbs to master* commit
'648d7d808bc1bca6dbf72d93bf3da7c65a9bd746'
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以追踪历史记录并找出整个故事,即使是那些不了解遗产的人也可以自己解决问题.然而,如果你摘樱桃或重订的东西,这些有价值的信息丢失(除非你将其包含在注释).
显然,如果一个提交还原并重新还原不止一次,那就会变得非常混乱.
Aff*_*lem 11
如果您错误地进行了恢复:
git revert <commit-id>
Run Code Online (Sandbox Code Playgroud)
你只需要运行:
git cherry-pick <commit-id>
Run Code Online (Sandbox Code Playgroud)
我必须使用此命令提交我的更改以进行处理。
您可以通过运行以下命令获取您的提交 ID:
git log --pretty=format:"%h - %an, %ar : %s"
Run Code Online (Sandbox Code Playgroud)
我是这样做的:
如果分支my_branchname包含在已恢复的合并中。我想恢复原状my_branchname:
我先做一个git checkout -b my_new_branchnamefrom my_branchname。
然后我做了git reset --soft $COMMIT_HASH这里$COMMIT_HASH是提交的提交正确的哈希前的第一次提交的my_branchname(见git log)
然后我提出一个新的提交git commit -m "Add back reverted changes"
,然后我推了新的分支git push origin new_branchname
,然后我做了新的分支拉请求。
小智 7
还原还原就能解决问题
例如,
如果abcdef是您的提交,并且ghijkl是还原提交时拥有的提交abcdef,请运行:
git revert ghijkl
Run Code Online (Sandbox Code Playgroud)
这将还原还原
如果您不喜欢“恢复恢复”的想法(特别是当这意味着丢失许多提交的历史信息时),您可以随时参阅有关“恢复错误合并”的 git 文档。
考虑到以下起始情况
P---o---o---M---x---x---W---x
\ /
A---B---C----------------D---E <-- fixed-up topic branch
Run Code Online (Sandbox Code Playgroud)
(W 是合并 M 的初始恢复;D 和 E 是对最初损坏的功能分支/提交的修复)
现在,您可以简单地重播提交 A 到 E,这样它们都不“属于”恢复的合并:
$ git checkout E
$ git rebase --no-ff P
Run Code Online (Sandbox Code Playgroud)
现在可以再次合并分支的新副本master:
A'---B'---C'------------D'---E' <-- recreated topic branch
/
P---o---o---M---x---x---W---x
\ /
A---B---C----------------D---E
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
243926 次 |
| 最近记录: |