尝试通过添加源远程并将历史记录从一个存储库移动到另一个存储库(无公共根)并重新定基到本地目标存储库上的分支。
来源:
A-B-C
\ /
E
Run Code Online (Sandbox Code Playgroud)
目的地通缉:
F-A'-B'-C'
\ /
E'
Run Code Online (Sandbox Code Playgroud)
git rebase --rebase-merges 的文档表示它将保留拓扑并重新创建合并提交,但是:
这些合并提交中任何已解决的合并冲突或手动修改都必须手动解决/重新应用。
现在,我想避免重新解决冲突,但我很困惑为什么需要这样做。合并提交的内容就在那里,我可以将 HEAD 分离到 to 。
所以,我尝试了
$ git rebase -i --onto destnewbranch --root --rebase-merges srcbranch
Could not apply C... master # Merge branch 'master'
(detached HEAD|REBASE x/y)
$ git status
interactive rebase in progress; onto F
Last commands done (n commands done):
pick B
merge -C C master # Merge branch 'master'
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git …Run Code Online (Sandbox Code Playgroud) 想象一下,我们使用Gitflow,从中分离出一个发布分支develop,最终将合并到 和main中develop。只有release质量的改进。其中大多数需要部署到集成阶段,因此它们的版本有多个pom.xml(多模块),并且package.json在分支上更新和标记release。
上面develop有针对未来版本的常规(不稳定)功能开发,并且版本已相应设置。有时,来自 的改进release会合并回develop. 我们会遇到合并冲突,在下图中用 X 标记。
main ----------------------o----
/
release o---o-----o-o-o
/ \ \ \
develop ----o---o---x--o--x-o-x----
^
we are here |
Run Code Online (Sandbox Code Playgroud)
例子:
release版本号是1.0.0-SNAPSHOT。develop版本号是1.1.0-SNAPSHOT分支之后的。develop,版本号保持不变。release偶尔会增加(并标记)为1.0.1、1.0.2等1.0.3。$ git …Run Code Online (Sandbox Code Playgroud) 我在 Git 中有一个临时分支和主分支似乎有点不同步。我正在使用 GitLab,并打开了从 stage 到 main 的合并请求,只是为了看看分支之间有什么区别。差异似乎包括主分支中已经存在的“更改”,对此我有点困惑。例如,“更改”选项卡中显示的更改之一是添加主分支中已有的文件,并且这两个文件是相同的。
然而,我在暂存分支上看到一些提交尚未进入主分支。这很好,我现在想让它们远离主分支。
我想知道如何使分支同步,以便当我打开从阶段到主分支的合并请求时,唯一的更改是实际上不在主分支中的分支。当我打开合并请求时,为什么主文件中已经存在的文件显示为“添加”?
理想情况下,我希望不要触及主分支,而是使用主分支中的内容重建暂存分支,并将不在主分支中的提交保留在阶段上。
git version-control git-merge merge-conflict-resolution gitlab
想象一下这种情况:
以下是上述场景的不同视图
("CHANGE"之后的数字表示该人改变了文件的"部分X".如果两个用户都改变了相同的部分,我们前面会发生合并冲突,如果他们改变了不同,那么就没那么多了)
Alice Bob
CLONE MASTER CLONE MASTER
-----------------------------------------
CHANGE 1 <-----+
COMMIT +-- upcoming merge conflict
----------------------------------------- |
CHANGE 1 <-----+
COMMIT
PUSH
-----------------------------------------
PULL <-- Bob's change +1 head
MERGE <-- Attempt to get rid of extra head
RESOLVE CONFLICT <-- Resolve merge conflict
COMMIT
-----------------------------------------
CHANGE 2 <-----+
COMMIT +-- yet another merge
PUSH | conflict ahead
----------------------------------------- |
CHANGE 2 <-----+
COMMIT
PULL <-- Bob's change, … 我仍然没有确定的方法来重现这个,但如果这是一个众所周知的问题,我还是会问它.会发生什么是git经常会产生这样的冲突:
<<<<<<< HEAD
} // action_do_add
=======
} // action_do_add
...lots of code here...
>>>>>>> some_branch
Run Code Online (Sandbox Code Playgroud)
所以我没有注意到我只是添加了一段新代码,而是认为我修改了整行代码.这有时会发生在文件的中间,但最常见的是 - 在文件的末尾.我的猜测是它可能与行尾字符有关,但我还是必须运行测试来确认这一点.有没有人有同样的问题,如果是的话,你如何解决它?
我正在尝试恢复一个提交,修改了一个已经重命名的文件.
修改过的文件曾经被调用bin/internal/call_parser.rb,并且当前被调用lib/call_parser.rb,并且在尝试进行恢复后我处于我的状态
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 16 commits.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: other/unrelated/file
#
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# deleted by us: bin/internal/call_parser.rb
#
Run Code Online (Sandbox Code Playgroud)
据我所知,当前版本的lib/call_parser.rb和文件bin/internal/call_parser.br的当时版本应该足够相似,以至于git可以检测到共享内容(我听说过git的工作原理)关于文件内容,而不是文件名).如何让git更加努力地工作以检测重命名,从而恢复到lib/call_parser.rb中的内容?
我多次陷入这种境地
1. I work on master branch and make some commits
2. Then i use git pull
3. Then i get auto merge fail , conflicting changes
Run Code Online (Sandbox Code Playgroud)
现在假设有5个文件存在冲突.我想知道
1. How can i overwrite those conflicting files with my files on my commit
2. How can i overwrite those with chnages from master
Run Code Online (Sandbox Code Playgroud)
在我做git pull之后
git version-control version git-checkout merge-conflict-resolution
我刚刚尝试用master另一个分支替换我的服务器上的分支,因为它master被破坏了,我似乎无法解决错误...
我替换它的分支是我的最后一个工作版本.我通过从本地计算机运行以下命令来完成此操作:
git checkout lastWorkingBranch
git merge -s我们的主人
git checkout master
git merge lastWorkingBranch master
git push origin master
然后,在服务器上,我跑了
git pull origin master
但是,这给出了以下输出:
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
root@moon:/code/moon# git stash
costing/views.py: needs merge
tools.py: needs merge
costing/views.py: needs merge
tools.py: needs merge
costing/views.py: unmerged (395725168ffab1962655116880b74158de3e1e56) …Run Code Online (Sandbox Code Playgroud) 假设当我从master 分支出来时,我的repo分支colors.txt上有一个master包含以下内容的文件:
red
green
blue
yellow
Run Code Online (Sandbox Code Playgroud)
然后my-branch,我分支到,在其中进行以下更改:
colors.txt添加red.txt以下内容:
red
Run Code Online (Sandbox Code Playgroud)添加green.txt以下内容:
green
Run Code Online (Sandbox Code Playgroud)添加blue.txt以下内容:
blue
Run Code Online (Sandbox Code Playgroud)添加yellow.txt以下内容:
yellow
Run Code Online (Sandbox Code Playgroud)现在,我需要对master进行一些更改,因此我想合并。但是,有人也更改colors.txt为:
red
green
blue
yellow
orange
purple
Run Code Online (Sandbox Code Playgroud)
在合并期间,我得到的唯一信息是删除了文件colors.txt,那么如何在master上看到对文件的更改,以便我可以适当地解决冲突(在这种情况下,通过添加orange.txt和purple.txt)?
简而言之,我们有一个仓库来托管不同职能团队的代码,即服务器端,移动,CI,自动化QA等。
现在,当我们尝试从支持分支的错误修复扩展到开发发布的分支时,出现了许多与不同团队/开发区域有关的冲突。由于我们没有一个人同时负责服务器端和移动端,因此很难解决一个人的冲突。
这里的问题是:是否可以通过某种方式仅解决一些冲突(例如服务器端),然后推送到中间分支,并让其他团队解决与其开发领域相关的冲突。只有在所有团队解决所有冲突之后,才最终合并中间分支。
也许我们在这里做错了。任何建议将不胜感激(除了将代码库分为单独的存储库,为此为时已晚)。