我创建了A主分支的分支。我进行了更改并向 master 分支提出了拉取请求。当我向 master 分支打开新的拉取请求时,我看到太多文件更改以及之前的更改和提交。
I only made changes in 9 files and 1 commit. It shows 87 commit and 30 file changes
我不知道如何解决。我创建了新的分支,脱离了master,采用了最新的分支并进行了尝试。但同样的结果一次又一次。请帮忙。令人沮丧,我已经花了几个小时
我正在学习变基,并看到了在功能分支上进行变基然后将其合并到主分支中的工作流程(作为示例):
git checkout feature
git rebase master
git checkout master
git merge feature
Run Code Online (Sandbox Code Playgroud)
然而,我看到最后一个命令的另一个类似选项是(而不是“git merge feature”):
git rebase feature
Run Code Online (Sandbox Code Playgroud)
在这种情况下,最后一部分有何不同?结果不会是与 master 之上的功能提交相同的线性时间线吗?
如果基础和源具有相同的文件内容,并且目标分支/ repo具有一些其他文件更改,它保留哪些内容,源文件或目标文件?
详细解释
A
|
B
/ \
C D
Run Code Online (Sandbox Code Playgroud)
假设在A-> B边缘添加了一个文件,然后在B-> C中再次删除文件,而在B-> D边缘单独留下.
我们想合并C和D.
如果共同的祖先是A,那么在合并C和D时没有变化(所以A,C没有文件&B,D有文件).
如果C(目的地)从D合并会发生什么?
如果D(目的地)从C合并会发生什么?
我在我的本地git存储库中有两个分支,master和Logging.两个分支都有BitBucket遥控器.master是我目前正在进行的项目的主要分支.当其他开发人员完成功能时,他们将其分支合并为master.日志记录是我当前的功能分支,是从master创建的.
为了获得最新的更新并减少我的合并痛苦,我经常做一个:
git pull origin master
Run Code Online (Sandbox Code Playgroud)
同时检出Logging分支.我对此命令的理解是从主分支的远程源获取并将任何更改合并到本地主服务器中.
然后我做:
git merge master
Run Code Online (Sandbox Code Playgroud)
我打算在这里做的是合并我刚刚进入Logging分支的更改.但是git总是响应:
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)
事实上,查看git log和gitk似乎表明我的本地Logging分支已经包含了刚刚提取的master内容.我没想到做一个"git pull origin master"会影响我的Logging分支.我在这里不理解什么?
我正试图git merge master从另一个分支做一个,然后我遇到了这个冲突:
<<<<<<< HEAD
=======
t.text "label_en"
t.text "help_text_en"
t.text "options_en"
>>>>>>> master
Run Code Online (Sandbox Code Playgroud)
我知道如何解决冲突,但我很好奇为什么git首先认为这是冲突,因为HEAD版本在特定行上没有内容.
<<<<<<< HEAD
=======
Run Code Online (Sandbox Code Playgroud)
git只是从master中添加3行并合并它不是一个简单的例子吗?
更新:
@Marcin是对的.基于答案,我做了一个测试,假设我有一个如下所示的git树:
A ---- B (master)
\
C (another branch)
Run Code Online (Sandbox Code Playgroud)
的内容temp.txt在commit A:
t.text "LALALA"
Run Code Online (Sandbox Code Playgroud)
的内容temp.txt在commit B:
t.text "label_en"
t.text "help_text_en"
t.text "options_en"
Run Code Online (Sandbox Code Playgroud)
temp.txtin的内容commit C是空的.
在这一点上,如果我这样做:
git checkout another_branch
git merge master
Run Code Online (Sandbox Code Playgroud)
然后我会得到以下内容:
<<<<<<< HEAD
=======
t.text "label_en"
t.text "help_text_en"
t.text "options_en"
>>>>>>> master
Run Code Online (Sandbox Code Playgroud) 在一个新的项目中,我们开始直接在master上提交一个新的git团队.我们不小心对主人做了一些不好的提交,这些提交被推到了一个中央回购并被整个团队拉下来.
实现我们的错误,我们就创建了一个特性分支关闭之前提交坏提交.我们的团队现在很乐意在功能部门工作.
我们现在希望我们的主分支包含功能分支中的确切代码,而不重新引入错误提交.
我看到该merge theirs选项已从更高版本的git中删除.那么丢弃糟糕提交并使我们的主人看起来与我们的功能分支完全相同的最佳方法是什么?
我想从存储库中取出,我相信来自该存储库的任何更改集与我的相撞,是更好的选择.
我如何自动化拉动,这样我就不必处理任何合并冲突,而且我从中拉出的存储库总能赢得这场战斗?
看看命令行选项,我不确定git pull --squash我是否正在寻找,或者我是否必须采用某种合并策略.我无法弄清楚我会传递给谁
-s <strategy>
--strategy=<strategy>
Run Code Online (Sandbox Code Playgroud)
要么
-X <option>
--strategy-option=<option>
Run Code Online (Sandbox Code Playgroud)
如果这确实是我应该使用的标志之一.
我使用git已经有一段时间了,想要使用rebase命令.早些时候我只使用了merge命令.
我对我的功能分支进行了更改,我需要将其与主分支合并.我可以继续通过git merge从主分支运行命令将我的更改合并到我的主分支.但是我可以使用rebase命令将我的分支更改到我的主服务器中吗?从文档中,我了解到rebase将从功能分支完成,以将更改从主服务器合并到我的功能分支.我的理解是正确的还是我需要为我的场景使用git merge命令.
1)有一个'master'分支,其中包含一个文件
1个
2
3
4
5
2)A从'master'分支并像
1个
2
100
3
4
5
3)B从'master'分支并像
1个
2
3
4
200
5
4)现在,推送变为主机。然后,B也尝试推动。
B会发生什么?有没有合并冲突或没有合并冲突?原因
这个问题的灵感来自以下出色的帖子:https : //blogs.msdn.microsoft.com/oldnewthing/20180312-00/ ? p = 98215 https://blogs.msdn.microsoft.com/oldnewthing/20180313-00/ ?p = 98225 https://blogs.msdn.microsoft.com/oldnewthing/20180314-00/?p=98235
这篇文章解释了为什么采摘樱桃是邪恶的,以及如何用部分合并代替它。这是图片:

其含义是,如果需要对功能分支进行更改,而该更改也必须位于master分支中,则在补丁分支上进行更改,然后将其合并到Feature和master分支中。
但这意味着我们事先知道更改也必须在主数据库中。这篇文章没有说明如果更改最初是在功能分支中签入的,该怎么办,直到后来我们才发现更改也必须在master分支中。
那该怎么办?如何仅将此更改合并到主服务器?请不要摘樱桃。
git ×10
git-merge ×10
git-rebase ×3
github ×2
conflict ×1
git-branch ×1
git-pull ×1
git-reset ×1
git-workflow ×1
gitlab ×1
pull-request ×1