在已经推送了空合并提交之后,如何撤销?

3

我所采取的步骤:

  1. 将主分支合并到我的特性分支。
  2. 开始解决提交问题,不小心在其中一个冲突上使用了“使用他们的版本”选项,然后想要重新做。
  3. 重置所有更改。
  4. 此时,由于处于合并状态,我似乎无法执行任何操作,不小心提交了这些更改并推送到了GitHub(我使用了SourceTree,并勾选了该选项!)

现在,每当我尝试从主分支合并时,它会认为我已经拥有最新的更改,而我的特性分支中没有添加任何内容。

我尝试运行git revert -m 1 <空提交的提交哈希值>,但我得到了以下错误信息:

On branch feature/profile_page
Your branch is up-to-date with 'origin/feature/profile_page'.
nothing to commit, working tree clean

然后我尝试还原之前的更改,这确实起作用了,但现在本地版本比GitHub上的功能分支落后一个提交。

有什么想法吗?

以下是我的日志:

* ff46aa6 (HEAD -> feature/profile_page, origin/feature/profile_page) Revert     "Added link to user profile page in MainMenu"
*   64e96b3 .
|\  
| * 9c023f5 (origin/master, origin/HEAD, master) Made the delete button invoke a pop-up which can delete the responders.
| * 87a028c Added a placeholder page that can be used to link to, or navigate from when you need a placeholder page.
| * 6ae954d Added the ResponderGroupPage and new delete icon.
| * 752fb83 Updated the layout to closer match the mock-up
| * 55e8c29 Added missing schedule icon
| * 6255338 Tweaks to make the page work/look correct on iOS
| * 178beb1 Update to the IncidentHistoryPage so that it displays a history of an event as a list under your selected item when you select one.
| * 5bfbbf1 Added titles to pages and button to link to IncidentHistoryPage.
| * 4570346 Added basic IncidentHistoryPage using mock data
* | 663a378 Added link to user profile page in MainMenu
* | 123da81 Added EditProfilePasswordPage and CloseAccountPage
* | 40a00ea Added change phone number page
* | b80f9af Added Change email page
* | 8a3710a Added MySubscriptions Page
* | 3c8ddee Added MyAccountPage
* | dd4fa9e ImageWithPopupMenu handles events
* | cbfae5f Added ImageWithPopupMenu
* | 304dd5c .
* | b730e7f EditProfilePage first pass
* | 0ac9603 Added UserProfile view model
* | af7f6ed .
* | 5f4e0c0 Profile Page first pass
| | * bbbbc4d (origin/feature/api_hooks) Setting up a wearer after activating a device will now associate the wearer with the device. Added WearerDataStore which will retrieve and manage the wearer list shown on the home screen.
| | * 45b3639 App will now check if a user is currently logged in when it launches.     - If there is currently an active session, which is not authenticated with the API key, then the app will navigate to the home screen instead of landing.
| | * 88250f5 Sign in page now using Bindings with view model for the entry text. Sign in page now using localisation. Added api calls to sign up process. Added validation to the sign up process for checking email address and phone numbers.
| |/  
| *   2590342 Merge branch 'master' of https://github.com/FirstAppLtd    /Watchie_Xamarin
| |\  
| | * 4e13537 Added the EditSafezonePage and placeholder pop-ups for CALL/RAISE SOS on the Homescreen and Wearer Profile screens.
| | *   ee1a2dc Merge branch 'master' into hockeyapp_integration
| | |\  
| | | * 7f1d961 New icon paths
| | * |   3d05a1f Merge branch 'master' into hockeyapp_integration
| | |\ \  
| | | |/  
| | | *   66d6303 Reworked the Homescreen so that it works on iOS as the list view didn’t work correctly. I moved the Icons on iOS into the root resources so that they can be indexed in the same way as on Android to avoid any needing to do #ifIOS look here.
| | | |\  
| | | | * d7e2d63 (origin/UpdatingIcons) Fix for the Homescreen so that it displays correctly on iOS. Moved where the iOS icons are stored so that they can be referenced exactly like the Android assets.
| | | | * 5d6846a New branch updating the icons
| | * | | a8d3ddc Set Android HockeyAppId
| | * | | df479a2 Set iOS HockeyAppId
| | * | | d0c820d Integrated HockeyAppId from info.plist. Disabled AuthenticateInstallation call for current config.
| | * | | d0702fe Added iOS HockeyApp to the Info.plist file
| | * | | 05f627a Refactored the HockeySDK App ID to the AssemblyInfo file for Android
| | * | | f99cf8e Added HockeySDK update to Android
| | * | | d0c94d0 Added ability to enable HockeySDK User metrics in Android
| | * | | 2b14729 Disabled HockeySDK for iOS
| | * | | 32fa935 Integrated HockeySDK for Android to detect crashes
| | * | | 58017a5 Added HockeySDK NuGet package to Android solution

你能添加你的Git日志吗?我也想知道为什么你要将主分支合并到你的特性分支中,这似乎有点奇怪? - sp1nakr
将主分支合并到特性分支中,以确保在提交到主分支之前一切正常,并附上日志。 - RobVoisey
请使用 git log --decorate --all --oneline --graph 或类似命令。 - sp1nakr
完成!合并提交是64e96b3,信息中有句号。 - RobVoisey
3个回答

2
根据您的日志,我认为最干净的解决方案是:
git checkout 663a3784ab82f019996a5091f3dfb2401c0403b5 -b feature_clean

这将检出您标记为“valid”的合并之前的提交(在您编辑前)作为新分支“feature_clean”。然后,您可以执行合并(git merge master)并确保它是干净的。最终,您可以用feature_clean替换feature,例如删除前者并重命名后者:
git branch -d feature # delete old branch
git branch -m feature_clean feature # rename clean branch
git push -f # force push feature to rewrite history on remote

我不建议使用git reset 663a37... --hard命令并紧接着强制推送,原因是这样会保留“破损”的分支,并且可以反复使用git checkout 663...来解决冲突。希望这能有所帮助。

谢谢!这似乎是最干净的解决方案;因为我的特性分支在我提交到主分支之后就结束了,所以我不需要保留它,这是最合理的做法。 - RobVoisey
很高兴能够帮助! - SVSchmidt

1
你在合并之前撤销了提交,这将创建一个新的提交来撤销该提交。我认为你想做的是使用git reset将分支引用重置到提交状态。如果你想重置到合并之前的状态,可以执行以下操作:git checkout feature/profile_pagegit reset --hard 663a378,这将本地的功能分支设置为合并提交之前的提交状态。在远程上,你需要执行git push -f,这将重写远程的历史记录。如果你是唯一在这个分支上工作的人,并且拥有正确的权限,那么这样做就没问题。或者你可以在 663a378 上创建一个新的功能分支 git checkout -b 663a378,然后使用它来执行你原本打算进行的合并。

1
这是一种重播您的提交的方法:

  1. restart from commit 663a378, using a "work in progress" branch :

    git branch wip 663a378
    git checkout wip
    
  2. re-run "merge master into this branch" :

    git merge master
    
  3. solve conflicts,
    and commit, possibly edit commit to put the branch name you expect in the message (e.g : "merge master into feature/profile_page" instead of "merge master into wip")

  4. if you are satisfied with this new merge : move the previous branches to these new commits :

    # push current commit to the remote "feature/profile_page" branch :
    git push -f origin wip:profile_page
    
    # set your local "profile_page" branch to this new commit :
    git branch -f profile_page wip
    
    # switch to other branch and delete wip :
    git checkout profile_page
    git branch -d wip
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接