我在git中做了三次提交。像这样。
asaurab-3.desktop% git lg
* 931b405 - (HEAD -> saurabh, origin/saurabh) minor fixes (6 minutes ago) <Saurabh Kumar Agarwal>
* 838d366 - adding upload and download functionality (15 minutes ago) <Saurabh Kumar Agarwal>
* 0d62348 - first commit (7 days ago) <Saurabh Kumar Agarwal>
* 4797854 - (origin/mainline, origin/HEAD, mainline) commit (2 weeks ago) <Perforce Administrator>
我想压缩这三个提交 所以我做了
git rebase -i HEAD~3
它打开了一个窗口,有三次提交。我将所有三个pick
替换为squash
,并使用:wq! .
我收到了错误消息
Cannot 'squash' without a previous commit
现在我的git lg
显示了
* 4797854 - (HEAD, origin/mainline, origin/HEAD, mainline) commit (2 weeks ago) <Perforce Administrator>
我所有的改变都消失了。我怎样才能让他们回来?
这是git status
git status
interactive rebase in progress; onto 4797854
No commands done.
Next commands to do (3 remaining commands):
squash 0d62348 first commit
squash 838d366 adding upload and download functionality
(use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'saurabh' on '4797854'.
(use "git commit --amend" to amend the current commit)
(use "git rebase --continue" once you are satisfied with your changes)
答案 0 :(得分:1)
你的rebase还没有完成。这不是一个错误,只是在挤压时的常规信息。运行rebase --continue
以完成变基。
$ git rebase --continue # repeat the command until rebase complete
我所有的改变都消失了。我怎样才能让他们回来?
OR ,您可以中止rebase并结帐到您想要的提交。您可以选择git reflog
输出。
$ git rebase --abort # abort/stop the rebase
$ git reflog # copy your desired commit hash
$ git checkout <commit> # I guess here, desired commit = 931b405
现在创建一个新分支
$ git checkout -b new-branch
你也可以按soft reset
压缩最后3次提交。
$ git reset --soft HEAD~3
$ git add .
$ git commit -m 'Squash last three commits'
$ git push origin HEAD # push to remote
答案 1 :(得分:1)
问题的答案仅限于git状态。
我做了
git rebase --edit-todo
然后早些时候,我在这三个人中都进行了压制,所以这个错误就要来了。我选择了第一次提交然后压缩其他两次提交。然后我保存了我的更改。
然后我做了
git rebase --continue
它解决了我的问题。