pig*_*ack 3 git git-checkout git-commit git-branch
我不得不用命令在Git中返回六次提交
git checkout idofthecommit
Run Code Online (Sandbox Code Playgroud)
我一直在做的是继续提交,提交,提交.因为我没有创建真正的新分支,所以当我git推送到外部存储库时
git push origin master
Run Code Online (Sandbox Code Playgroud)
它告诉我一切都是最新的.
这意味着我实际上没有对主人做任何改变.
我如何将我一直在做的提交移动到主分支?
如果您对所运行命令的描述是正确的 - 现在根据您正在处理的内容创建一个分支,以创建一个可靠的命名引用(git branch WIP HEAD).然后对master(git rebase master)和checkout master进行rebase 并在WIP中合并.
您可以非常简单地测试它,以复制情况并探索您需要的命令及其执行的操作.因为这git graph是别名git log --graph --oneline --decorate --abbrev-commit,只是产生一个漂亮的git日志.
创建一个包含8个提交的演示存储库,然后签出六个提交并创建更多提交
$ cd /tmp && git init demo && cd demo
$ for msg in one two three four five six seven eight; do echo $msg>file && git add file && git commit -m $msg; done
$ git checkout HEAD~6
$ for msg in nine ten eleven; do echo $msg>file && git add file && git commit -m $msg; done
Run Code Online (Sandbox Code Playgroud)
所以我们来看看这个:
$ git graph --all
* e81b31c (HEAD) eleven
* c005e75 ten
* c567d25 nine
| * 4d28c3d (master) eight
| * 380f715 seven
| * 9966c80 six
| * 6b2f757 five
| * e43d079 four
| * ce0ff34 three
|/
* 8d5a6e1 two
* 1f880ae one
Run Code Online (Sandbox Code Playgroud)
所以这看起来就像是从8d5a6e1获取的功能分支.唯一特别之处在于它唯一的参考是HEAD.如果您现在添加分支引用,它将成为正常的功能分支.
如果您在使用分支标记标记此工作分支之前意外检出master或其他分支,那么您将松开对此新提交链顶部的引用.现在你失去了分支.在这种情况下,您需要使用reflog来查找该链上的最后一次提交,并为该提交添加分支引用.我们可以从上面的演示库中看到这个:
$ git reflog
e81b31c HEAD@{0}: commit: eleven
c005e75 HEAD@{1}: commit: ten
c567d25 HEAD@{2}: commit: nine
8d5a6e1 HEAD@{3}: checkout: moving from master to HEAD~6
4d28c3d HEAD@{4}: reset: moving to 4d28c3d
....
Run Code Online (Sandbox Code Playgroud)
我们可以从reflog中看到一些提交回来,我们检查了HEAD~6然后再添加了三个提交.然后我们可以发出git branch recover-commits e81b31c一个指向该组提交的分支并恢复它们.
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |