cat*_*ine 98 repository bitbucket
我犯了一个错误,我不知道如何删除我在存储库中的最新推送.我提取应用程序的最新更新,但它有冲突,我把它推送到存储库.
如何删除我的上次提交?或者如何解决?
ase*_*max 94
首先,如果您在同一代码存储库中与其他人一起工作,则不应删除提交,因为当您在存储库上强制更新时,它将使您的同事的本地存储库处于非法状态(例如,如果他们在您删除的提交之后进行提交,这些提交将无效,因为它们基于现在不存在的提交).
说,你可以做的是恢复提交.此过程以不同的方式完成(不同的命令),具体取决于您使用的CVS:
在git上:
git revert <commit>
Run Code Online (Sandbox Code Playgroud)
hg backout <REV>
Run Code Online (Sandbox Code Playgroud)
编辑: 恢复操作创建一个新的提交,它与恢复的提交相反(例如,如果原始提交添加了一行,还原提交删除了该行),有效地删除了不需要的提交的更改,而不重写存储库历史记录.
nau*_*101 94
如果你不与他人合作(或者很乐意让他们感到非常烦恼),那么就可以从bitbucket分支中删除提交.
git reset HEAD^ # remove the last commit from the branch history
git push origin :branch_name # delete the branch from bitbucket
git push origin branch_name # push the branch back up again, without the last commit
Run Code Online (Sandbox Code Playgroud)
在git中,master分支并不特殊 - 它只是一个约定.但是,bitbucket和github以及类似站点通常需要有一个主分支(大概是因为它比编写更多代码来处理存储库没有分支的事件更容易 - 不确定).所以你需要创建一个新的分支,并将其作为主分支:
# on master:
git checkout -b master_temp
git reset HEAD^ # undo the bad commit on master_temp
git push origin master_temp # push the new master to Bitbucket
Run Code Online (Sandbox Code Playgroud)
在Bitbucket上,转到存储库设置,并将"Main branch" master_temp更改为(在Github上,更改"Default branch").
git push origin :master # delete the original master branch from Bitbucket
git checkout master
git reset master_temp # reset master to master_temp (removing the bad commit)
git push origin master # re-upload master to bitbucket
Run Code Online (Sandbox Code Playgroud)
现在去Bitbucket,你应该看到你想要的历史.您现在可以转到设置页面并将主分支更改回master.
此过程也适用于任何其他历史变更(例如git filter-branch).您必须确保在新历史记录与旧历史记录分离之前重置为适当的提交.
编辑:显然你不需要在github上解决所有麻烦,因为你可以强制推动重置分支.
下次有人试图从您的存储库中取出时(如果他们已经提取了错误的提交),则拉动将失败.他们将在更改的历史记录之前手动重置为提交,然后再次拉取.
git reset HEAD^
git pull
Run Code Online (Sandbox Code Playgroud)
如果他们已经提取了错误的提交,并在其上提交,那么他们将不得不重置,然后git cherry-pick他们想要创建的好提交,有效地重新创建整个分支而没有错误的提交.
如果他们从未拉过错误提交,那么整个过程不会影响他们,他们可以正常拉动.
Shu*_*ker 43
你可以重置HEAD^然后强行推它.
git reset HEAD^
git push -u origin master --force
Run Code Online (Sandbox Code Playgroud)
它将删除您的上次提交,并将反映在bitbucket作为提交删除但仍将保留在其服务器上.
rbe*_*nto 11
这是一个简单的方法,最多分为 4 个步骤:
0 - 通知团队您要修复存储库
与团队联系,让他们知道即将发生的变化。
1 - 删除最后一次提交
假设您的目标分支是master:
$ git checkout master # move to the target branch
$ git reset --hard HEAD^ # remove the last commit
$ git push -f # push to fix the remote
Run Code Online (Sandbox Code Playgroud)
如果您单独工作,此时您就完成了。
2 - 修复您队友的本地存储库
在你的队友身上:
$ git checkout master # move to the target branch
$ git fetch # update the local references but do not merge
$ git reset --hard origin/master # match the newly fetched remote state
Run Code Online (Sandbox Code Playgroud)
如果你的队友没有新的提交,那么你就完成了,你应该保持同步。
3 - 恢复丢失的提交
假设一个队友有一个新的和未发布的提交,在这个过程中丢失了。
$ git reflog # find the new commit hash
$ git cherry-pick <commit_hash>
Run Code Online (Sandbox Code Playgroud)
根据需要对尽可能多的提交执行此操作。
我已经成功地多次使用这种方法。它需要团队的努力来确保一切同步。
就我而言,我的队友已经提交了错误的代码。所以无论如何我都必须恢复该提交,所以我尝试
运行此命令以恢复提交
git revert [LastCommitID]
Run Code Online (Sandbox Code Playgroud)
此后,更改未反映在存储库中,因此
我执行了这个命令
git push --force origin master
Run Code Online (Sandbox Code Playgroud)
该命令通过删除上次提交来反映更改
| 归档时间: |
|
| 查看次数: |
211411 次 |
| 最近记录: |