git应用的问题--提交到错误的分支
git应用的问题--提交到错误的分支
在使用git的过程中,我们会接触到数个分支,因此也容易出现将内容提交到错误的分支的情况。因此我们需要将这次提交移动回到正确的分支,这里我们使用git中的命令对问题进行修正(当然你也可以通过回忆和对比将内容重新还原出来)。这里我们分成两种情况:
- 未提交到远端
- 已经提交到远端
未提交到远端
假设我们的git目前是这个情况,feature-1, feature-2
已经合并到develop
上。
接着我们将原本应该提交到feature-1
上的内容提交了feature-2
分支上,因此会形成下图的情况。
由于我们的还未将代码提交到远程,因此只要使用git cherry-pick
以及git reset
便可将代码移动到正确的分支上,同时将develop
分支进行还原。
git checkout feature-1
切换分支到feature-1
上。git cherry-pick fa4d006
将错误的提交通过cherry-pick
命令单独拉取到feature-1
上,其中fa4d006
就是那一次错误的提交的编码。git checkout feature-2
切换到feature-2
分支。git reset --hard 548e65c
将feature-2
分支完全重置到提交前的状态。
经过以上的步骤,我们得到的节点树就如下图,已经回到了正确的情况。注意在操作的时候,要先进行cherry-pick
再reset
重置。
已经提交到远端
接着我们来讲讲当在下图已经提交到远程时怎么办。
由于我们本地的修改已经同步到远端,那么再通过之前的git reset
是不会改变远端的git版本,除非我们使用git push -f
来强制重置远端的feature-2
分支情况。
但是!但是!但是!
git push -f
可以说是非常危险🚨🚨🚨的操作,因为你的强制推送可能会导致所有使用当前git项目的人都出现版本混乱问题,非常不建议在团队中使用该操作。
因此我们将换成git revert
来重置feature-2
分支的情况。下面我们来看看操作步骤:
- 先是
git checkout feature-1
和git cherry-pick fa4d006
将错误的提交拉取到feature-1
上。 git checkout feature-2
切换到feature-2
分支。git revert fa4d006
将错误的提交进行回滚。git push
最后将feature-2
同步到远端。
经过上面的步骤我们就可以将分支回到正确的情况了,cherry-pick
和revert
之间就没有先后顺序了。