相关疑难解决方法(0)

Git压缩所有提交在分支中没有冲突

对我们来说,一个常见的开发工作流程是checkout分支b,向它提交一堆,然后将所有这些提交压缩成一个(仍在b).

但是,在rebase -i压缩所有提交的过程中,经常会出现多个步骤的冲突.

我本质上希望将分支更改为一个提交,该提交表示最终提交时存储库的状态 b

我做了一些搜索,但我还没找到我正在寻找的东西.我不想,merge --squash因为我们想在合并之前测试压扁的功能分支.

git rebase squash

27
推荐指数
2
解决办法
9948
查看次数

合并提交与正常提交

在日常生活中我SmartGit用作选择的客户.然而,我的团队成员坚持使用git native,非商业GUI.我们发现我们的合并提交看起来有些不同.

这些是SmartGit在请求合并分支时给出的选项: SmartGit提交类型

在下图中,您可以看到我的示例SmartGit图输出,其中包含:

  • master
  • 一个分支合并为master并带有merge commit选项
  • 一个分支与simple commit选项合并

其中一个branches(with_merge_branch)通过连接分支与主线路来实现合并操作.第二个(normal_commit_branch)没有.

git树

问题是,如何在本机git命令中强制执行这两种行为?即两个提交之间的区别是什么?

git version-control merge smartgit

17
推荐指数
1
解决办法
2万
查看次数

Git合并时不包括从一个分支到另一个分支的提交

在开发过程中,我经常需要提交并推送"中间"提交,即提交代码不可编译或更改内容等等.我不想做这样的提交,但这是继续我的工作所必需的从办公室到家,有时为其他开发人员提供他们可以开始工作的基础.

我以为我找到了解决这个问题的方法:

  1. 我创建一个单独的"dev"分支并进行所有中间提交.

  2. 一旦代码处于良好状态,请进行合并以掌握.因此,master不会包含"中间"提交,只会包含"正常"提交.

  3. 删除所有中间提交的"dev"分支.

但这不起作用.当我进行合并时,不仅包括合并提交到master,还包括来自"dev"分支的所有"中间"提交.所以删除"dev"分支什么都没有,它的"中间"提交就在那里.

所以问题是:是否有可能以master只包含自己的提交+合并提交的方式进行合并,而不包括第二个分支的提交?如果这是不可能的,你能否告诉我如何实现我的目标 - 能够临时保存中间结果,还能在以后无缝删除它们?

git

15
推荐指数
1
解决办法
6775
查看次数

合并分支时使用pull和no-ff时快进

我的工作流程中有许多短命分支,我希望它们能够分开.所以,我打算用git config --add merge.ff false.但是,当我正在进行拉(我理解为fetch + merge)时 - 然后我想要一个快进行为,以避免不必要的额外提交.

这是一件好事吗?这可能吗?

git

14
推荐指数
1
解决办法
1万
查看次数

合并冲突会在压缩提交时破坏我的提交消息

我通常使用git的工作流程是创建一个新的功能分支,在频繁提交时做一些工作,然后在功能正常工作和/或稳定时合并回开发分支.

通常,当我这样做时git merge --squash feature-branch,我得到一个很好的"压缩以下提交"消息,该消息自动填充来自功能分支的所有提交消息.

但是,如果存在任何合并冲突(比如说我完成并合并了另一个功能),我似乎丢失了来自分支的所有提交消息.自动填充的提交消息填充冲突,但不填写提交消息.我的提交消息在哪里?我能把它们还给他们吗?

git merge

11
推荐指数
2
解决办法
2822
查看次数

Git提交样式:一次更改所有文件或一次更改一个文件?

我通过一次提交许多文件来保存我的工作.我想知道为每个文件提交是否会更好,但这看起来好多了.

我对现在的方式没有任何问题,但我打算将我的代码放在GitHub上,我希望它易于理解.

我想知道你们其他人使用git是做什么的.如果你能为我拼出来的话.我是Git的新手,我一直在Windows中使用TortoiseGit和gitk.

git version-control git-commit

11
推荐指数
2
解决办法
2297
查看次数

Git在合并时忽略已删除的文件

我有两个存储库.不时,我要的内容合并othermain.但是,合并会忽略已删除的文件.让我通过一个例子解释一下:

mkdir -p test/main test/other

cd test/other/
git init
touch one two three
git add .
git commit -m "Add one, two and three."

cd ../main/
git init
touch four
git add .
git commit -m "Add four."
Run Code Online (Sandbox Code Playgroud)

添加othermain远程.

git remote add other ../other/
git fetch other
Run Code Online (Sandbox Code Playgroud)

合并其内容.

git merge --squash other/master
git commit -m "Merge other."
Run Code Online (Sandbox Code Playgroud)

它正确添加文件.现在,删除一个文件other.

cd ../other/
git rm two
git commit -m "Remove two."
Run Code Online (Sandbox Code Playgroud)

合并更改为main …

git

9
推荐指数
1
解决办法
3052
查看次数

为什么合并和删除后Git功能分支仍然可见?

采取的步骤

我将一个feature分支合并回master并删除了feature分支.但它仍然出现在树上.

结果

删除功能分支之前,SourceTree中的树可视化: 删除功能分支之前的树

删除功能分支 SourceTree中的树可视化: 删除功能分支后的树

feature正如预期的那样,左侧列表中的分支消失了,树形可视化中的标签也消失了,同样如预期的那样.

问题

但:

  1. 为什么紫罗兰部分仍然显示?
  2. 我需要执行哪些Git命令才能看到紫色部分?我可能自己回答了这个问题.

我知道上面截图中的最终提交有两个父母.但我不明白为什么在功能分支上发生的紫罗兰提交不在最终合并提交内master(我认为,这意味着紫罗兰分支在删除之后不再可见).

从命令行重新显示步骤(而不是SourceTree)

我在命令行上重播它(只是为了检查SourceTree是否做了我认为它做了什么),最后一步是a git merge feature.相同的情况:

命令行上的树形象化

试用 --squash

我解除了最后一次合并并尝试了这个:

git merge --squash feature
git commit "Squashed merge"
git delete -D feature # Note that -d did not work; it said "error: The branch 'feature' is not fully merged."
Run Code Online (Sandbox Code Playgroud)

现在它显示了我本来期望的东西.一条直线,没有任何feature分支表示:

直线树线后--squash

  1. 这个合并与以前的合并有什么不同?

我想在上面的所有试验和错误之后我将这些合并发生的事情拼凑在一起,但如果有人能够真正详细解释上述步骤的语义差异,我将不胜感激.

git git-merge git-branch

7
推荐指数
1
解决办法
1802
查看次数

如何在多个不同的分支上工作,我可以在它们之间轻松切换?

有没有办法处理同一个文件,但在GIT中的不同功能/分支?

我确定有办法,但最简单的方法是什么?
我不想隐藏我的更改,因为这很麻烦.

通过SVN,我能够在2个不同的分支上工作,作为2个不同的实体,没有任何干预,并且很容易在两者之间切换.

svn git

7
推荐指数
1
解决办法
635
查看次数

问题将Git Feature分支合并到"Beta"分支(在它已经合并到"Develop"分支之后)

我们有一个标准的Web项目,并为该项目维护3个核心分支:Master,Beta和Develop.以下是我们使用的流程/工作流程的摘要:

(1)请求新功能/更新,以便我们创建新的功能分支.

(2)为新功能分支进行提交,并将功能分支合并到"开发"分支中; 然后将"开发"分支发布到要测试的测试环境.

(3)测试/批准新功能后,在同一功能分支中进行新的拉取请求; 这个新的pull请求被合并到'Beta'分支中.

'Beta'分支拥有我们所有的"准备就绪"功能:事实上,我们将'Beta'分支直接发布到生产环境,当它准备就绪时,我们立即将'Beta'分支合并到'Master'分支......通过这样做,'Master'分支始终是生产环境中代码的副本.

问题:在上面的步骤3中,当我们尝试将新的Feature分支合并到'Beta'分支时,pull请求包括已合并到'Develop'分支的所有新提交.

示例:5个要素分支分别合并到"Develop"分支(分支标记为1,2,3,4和5).所有5个都经过了测试,但是前面有4个错误.所以分支"5"被批准,我们尝试为该功能分支创建一个拉取请求并将其合并为"Beta"....但是当我们这样做时, pull请求包括所有5个功能分支....而不仅仅是分支"5"的提交.

我们必须做错事!我们可以做些什么来修复我们的流程/工作流程?

git merge github

7
推荐指数
2
解决办法
594
查看次数