假设我从origin/master
分支到brancha
。
我创建,提交并推送更改到brancha
(这包括创建,提交和推送新文件)。
现在,我想让brancha
再次与origin/master
完全相同的内容(因为,说我的更改是错误的,并且更好的解决方案被放在master
上)。
所以我希望我的分支基本上是origin/master
的一个新分支,但我希望我的旧更改已被记录,所以我可以在历史的后期看到它。
有没有办法做到这一点?
要保存更改,您需要指向其当前提示的指针 - 例如标签或其他分支。
git tag <tag_name> brancha
然后重置分支,使其与当前的origin/master
匹配:
git checkout brancha
git reset --hard origin/master
如果你想在你的brancha提交(你想保留)之上创建一个新的提交,反映origin / master,我会建议重置 - hard然后是soft(如“Practical uses of git reset --soft
?”)。
m--m--m (origin/master)
\
a--a--a (brancha, HEAD)
首先,将索引和工作树重置为您想要查看的内容:origin / master
git checkout brancha
git branch tmp
git reset --hard origin/master
m--m--m (origin/master, brancha, HEAD)
\
a--a--a (tmp)
问题:brancha
历史不再被引用:将brancha
HEAD移回其原始位置,但不更改索引和工作树(这两者都反映了origin/master
)
git reset --soft tmp
m--m--m (origin/master)
\
a--a--a (tmp, brancha, HEAD)
现在你可以添加和提交:应该计算相关的delta来设置一个与origin/master
具有相同内容的新提交。
git add .
git commit -m "Restore origin/master content in a new commit on brancha"
m--m--m (origin/master)
\
a--a--a----M (brancha, HEAD)
(tmp)
M
和origin / master commit应该具有相同的内容。