做git rebase后改变了

时间:2017-03-10 19:18:48

标签: git

我在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)

2 个答案:

答案 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 

它解决了我的问题。