我对Git没有经验,现在我有一个很大的问题落到了我的腿上.
这是我当前分支的样子:
feature /---F1-----F2----\
/ \
master -----M0-----M1-----M2-----M3-----M4
\ /
bugfix \--B1-----B2-----------/
Run Code Online (Sandbox Code Playgroud)
情况:
有人做了一件非常糟糕的事情并推出了一个非常糟糕的合并(M3).在我将B1和B2合并到M4之后,当我们的模型(不是源代码)无法加载时,我才注意到错误的合并.幸运的是,我还没有推过M4.
问题:
我该如何重新设置好的东西?我想要M0,M1,M2,F1,F2,B1和B2.但我不想要M3和M4(因为M4显然已被打破).如果我不得不放弃改变,那么可以牺牲F1和F2 :)
我看着,git revert但我不相信我完全理解它是如何工作的.所以...我真的希望得到如何解决这个问题的帮助.
提前致谢.
我将拉取请求合并到我们的开发分支中,但需要对其中一个文件进行额外的更改。我想恢复拉取请求,然后将更改添加到功能分支,但是当我在 Azure Devops 中使用恢复按钮时显示:
Encountered conflicts when reverting commit '8a750f'. This operation needs to be performed locally.
Run Code Online (Sandbox Code Playgroud)
信息非常少,没有任何内容可以指出错误是什么或错误在哪里。
我的第一个问题是:恢复原始功能分支,在此处添加新更改,然后再次合并它们Dev,使用新的拉取请求是添加新更改的最佳方式吗?或者我应该将新的更改添加到新分支中并将该分支推送到Dev?我主要关心的是如何将这两个功能分支(已经合并的分支Dev和新的分支)推送到进一步的分支,例如Test和Master?
第二个问题是关于错误消息:它是什么意思以及如何检查冲突?我使用 Visual Studio 2019 和 .Net Core 2.2。
这个问题与其他问题的不同之处在于,我希望在恢复一些提交时保留一些提交.
这是我的设置.
Upstream repo on github (public repo which I don't own)
Personal repo on my server(git clone --bare $upstream)
Run Code Online (Sandbox Code Playgroud)
我的工作流程是这样的:
Need to customize my personal branch
1. check out origin/master(Personal)
2. make changes
3. push to origin/master
Need to get new feature or bug fix from the original author(github)
1. git fetch upstream
2. git merge upstream/master
Run Code Online (Sandbox Code Playgroud)
现在我发现upstream/master有一个bug并且想要恢复,
如何在我最后一次获取/合并上游之前返回状态?
编辑.
假设
- 我上游合并了
- 我将团队成员推送到origin/master(个人)的内容合并
现在我要撤消第1步.
git reset --hard commit_sha_of_one_prior_the_merge_1
(虽然找到啥是不容易的.git的日志显示了很多承诺的上游沙的,所以这是不容易找到犯-SHA-of_one_prior_the_merge_1这是不是
upstream而是origin/master)
如何保持第2步合并?
假设一个稍微复杂的场景
- 我上游合并了
- 我合并了另一个团队成员推送到Personal的内容
- 我也将我的工作推向了个人
现在我想撤消上游合并.我该怎么做?
我们的存储库有一个主分支,但似乎我们的一个同事有一个具有不同历史的主分支.昨天他把他的主人合并成了主人并推了推.所以今天我们中的一些人已经开始工作了.当我们意识到这个问题已经过了几个小时的工作......
所以我的问题是如何撤消他的合并,但仍然保持今天的代码更改?左侧是我们目前的状态,右侧是我正在拍摄的.我应该改变吗?或者有办法撤消合并?什么是最好的方法?
编辑1:我不认为这是Undo一个尚未推送的Git合并的副本,因为提交被推送到原点以及我有其他提交错误后我想保留历史记录.
编辑2:我试图改变,问题是新手在过去的两周内融入了他的主分支......所以即使我还原我也没有摆脱他创造的新"时间轴"......我只要我摆脱他的时间表,重写历史没有问题......
编辑3:
最后,我最终找到了一个未受影响的存储库版本,并回复了事件发生后所做的修改......
我将beta分支合并到主分支中.我推到原点.我现在希望master在本地和远程合并之前就像它一样.
撤消已经推送的合并的一个很好的答案表明
git revert -m 1 commit_hash
Run Code Online (Sandbox Code Playgroud)
如果这确实是要走的路,我该如何确定commit_hash?我没有成功尝试merge-base返回的哈希:
$ git merge-base --all master beta
1f4b949b7ef97abf913ae672e3acd0907abfac1b
$ git revert -m 1 1f4b949b7ef97abf913ae672e3acd0907abfac1b
error: Mainline was specified but commit 1f4b949b7ef97abf913ae672e3acd0907abfac1b is not a merge.
fatal: revert failed
Run Code Online (Sandbox Code Playgroud)
我已经检查了分支的git-log和gitk再现,但是它们很长,我不太清楚我的解释,觉得我应该寻求帮助才能做出更大的混乱.Beta来自v2,它来自master.随着我与主人保持最新的分支机构,我们已经有一些从大师到v2和beta的合并.从beta到Master的方向的合并是我想纠正的错误.
一旦我确定了合并点,如果我发现在合并之后对master进行的任何提交真的应该在beta分支上,那么移动它们的最佳方法是什么?
如果要"撤消"功能分支,您有哪些选择?假设你添加了一个supercool-feature你完成的新功能(合并到开发并删除功能分支)然后它进入一个版本.但是你的用户真的不喜欢这个supercool-feature.如何撤消/回退/反转已合并到开发和发布中的此功能?
我正在使用SourceTree进行版本控制.
我是新Github所以请原谅看似明显的问题.我有一个Experimentation分支,在master分支之前有24个提交.
在本教程之后,我将master分支与Experimentation分支合并,如下所示:
git checkout master
git merge Experimentation
Run Code Online (Sandbox Code Playgroud)
(没有合并冲突.)
但后来我意识到合并两个分支不会保留Experimentation分支的提交历史,而我真正想要的是做一个rebase(为了保留Experimentation分支的提交历史).
所以我的问题是:如何撤消主分支的合并?
我已经尝试过了:
$ git branch
Experimentation
* master
pod-attempt
$ git merge --abort
fatal: There is no merge to abort (MERGE_HEAD missing).
Run Code Online (Sandbox Code Playgroud)
在"致命"的消息让我感到困惑B/C,我想我做了合并的主分支.
我碰巧选择了错误的分支,因为我原本应该选择主分支,但最终却选择了开发分支。这确实合并了我的本地仓库。但是,我不想合并Bitbucket存储库。有什么办法可以撤销拉取或删除合并请求(见图)?
编辑:
我还没有对Bitbucket进行任何更改(是如图所示)。
如果一个 Pull 请求被合并(比如 PR3),并且在这几个 Pull 请求(比如 PR4、PR5 等)之上被合并,这些请求对先前合并的 Pull 请求 PR3 中的同一文件进行了更改,现在我想要恢复 Pull 请求 PR3,Git 不允许我自动执行此操作并给出此错误。
抱歉,此拉取请求无法自动还原。它可能已经被恢复,或者内容可能在合并后发生了变化。
我应该如何恢复拉取请求 PR3?
git ×10
git-revert ×3
github ×2
merge ×2
azure-devops ×1
bitbucket ×1
git-branch ×1
git-flow ×1
git-log ×1
git-merge ×1
revert ×1
undo ×1