我有一个Git存储库,看起来像这样:
A <- B <- C <- D <- HEAD
我希望分支的头部指向A,即,我希望B、C、D和head消失,我希望头部与A同义。
听起来我可以尝试重新设置基础(不适用,因为我已经在两者之间进行了更改),也可以恢复。但如何恢复多次提交?我一次回复一个吗?订单重要吗?
我有一个Git存储库,看起来像这样:
A <- B <- C <- D <- HEAD
我希望分支的头部指向A,即,我希望B、C、D和head消失,我希望头部与A同义。
听起来我可以尝试重新设置基础(不适用,因为我已经在两者之间进行了更改),也可以恢复。但如何恢复多次提交?我一次回复一个吗?订单重要吗?
当前回答
使用Git还原
也可以使用restore命令:
A <- B <- C <- D <- HEAD
假设你希望HEAD看起来和A完全一样,确保你已经找到了最新的主人。然后剪一根新树枝。
git switch -c feature/flux-capacitor # synonymous with checkout -b
git restore --source A .
git add .
git commit
git push
restore命令将所有内容(.)更改为--source提交时的内容。然后将其提交给本地分支,并将其推送到源。然后,您可以对其进行公关。
这样做的好处是不会改变其他人可能以其为基础的任何历史。它也为未来的人们留下了有用的历史。
文档:git restore
其他回答
git reset --hard a
git reset --mixed d
git commit
这将同时对所有人起到恢复作用。给出一个好的承诺信息。
如果你
合并提交和您无法恢复,并且你不介意粉碎你要还原的历史,
那么你可以
git reset --soft HEAD~(number of commits you'd like to revert)
git commit -m "The stuff you didn't like."
git log
# copy the hash of your last commit
git revert <hash of your last (squashed) commit>
然后,当您想要推送更改时,请记住使用-f标志,因为您修改了历史记录
git push <your fork> <your branch> -f
首先确保您的工作副本未被修改。
然后:
git diff --binary HEAD commit_sha_you_want_to_revert_to | git apply
然后就承诺吧。不要忘记记录还原的原因。
我真的想避免硬重置,这就是我想到的。
A -> B -> C -> D -> HEAD
返回A(后退4步):
git pull # Get latest changes
git reset --soft HEAD~4 # Set back 4 steps
git stash # Stash the reset
git pull # Go back to head
git stash pop # Pop the reset
git commit -m "Revert" # Commit the changes
使用Git还原
也可以使用restore命令:
A <- B <- C <- D <- HEAD
假设你希望HEAD看起来和A完全一样,确保你已经找到了最新的主人。然后剪一根新树枝。
git switch -c feature/flux-capacitor # synonymous with checkout -b
git restore --source A .
git add .
git commit
git push
restore命令将所有内容(.)更改为--source提交时的内容。然后将其提交给本地分支,并将其推送到源。然后,您可以对其进行公关。
这样做的好处是不会改变其他人可能以其为基础的任何历史。它也为未来的人们留下了有用的历史。
文档:git restore