使用gitk log,我无法发现两者之间的差异.如何观察差异(使用git命令或某些工具)?
来自mercurial,我使用分支来组织功能.当然,我也想在我的历史中看到这种工作流程.
我使用git开始了我的新项目并完成了我的第一个功能.合并该功能时,我意识到git使用快进,即如果可能,它会将我的更改直接应用到主分支并忘记我的分支.
因此,思考未来:我是唯一一个从事这个项目的人.如果我使用git的默认方法(快进合并),我的历史将导致一个巨大的主分支.没有人知道我为每个功能使用了一个单独的分支,因为最后我只有那个巨大的主分支.这看起来不专业吗?
通过这种推理,我不想要快进合并,也不知道为什么它是默认的.这有什么好处的?
我真的不能没有想过的时候,我会用git merge,而不是git rebase和不希望有一个承诺现身.有没有办法配置git默认快速关闭?事实上,有一个--ff选项似乎意味着有一种方法,但我似乎无法在文档中找到它.
一个成功的Git分支模型建议--no-ff在合并分支时使用:
该
--no-ff标志使合并始终创建新的提交对象,即使可以使用快进执行合并.这样可以避免丢失有关功能分支历史存在的信息,并将所有一起添加功能的提交组合在一起.[...]是的,它会创建一些(空的)提交对象,但增益要大得多.不幸的是,我还没有找到一种方法来制作
--no-ffgit merge的默认行为,但它确实应该如此.
但是,了解Git工作流建议不要使用--no-ff:
因此,您添加了一条新规则:"当您在功能分支中合并时,使用
–-no-ff强制执行新提交."这可以完成工作,然后继续.[...]
这两种方法对于差异情景似乎都是合理的,但是什么被认为是"良好实践?"
你什么时候使用--no-ff,什么时候不用,为什么?
应该使用哪一个来隐藏微观发现?
是git merge --squash和git merge --no-ff --no-commit否认其他父母的唯一区别?
(为简单起见)我有一个master分支和一个dev在我的Git-repo中.我想确保master分支始终正常工作,因此我所做的所有工作都应该在dev分支机构中.
但是,当我将合并中的更改--no-ff合并时,我倾向于留在master分支中,并继续在其中工作(因为我忘了检查我的dev分支).
我可以为master分支建立一个规则,它表示我不能提交,快进合并,但只能--no-ff从另一个分支合并?
这必须适用于私有托管存储库(而不是GitHub和BitBucket).
因此,我的一位同事尝试在 Web 界面中使用 GitHub 的“通过快进合并”选项来合并一个分支,以保持历史记录免受虚假合并提交的影响(master他们合并到的分支,自从到-合并功能分支已启动)。
有趣的是,这并没有按预期工作:所有提交都有新的提交哈希。
仔细检查一下,似乎合并选项实际上被称为“Rebase and Merge”,它似乎确实相当于git rebase --force改变了提交者信息(进行合并的人以及合并发生的时间)。
我花了很长时间才确认我的怀疑确实如此,因为我无法使用 cmdline 工具向我展示功能分支上的原始提交和看似相同的提交(具有不同的哈希值)之间的区别在主分支上。(最后,我发现,gitk同时显示了提交者和提交作者;在非常最后我发现我也能得到通过这些信息git log --pretty=raw)
所以:
git rebase 无需在--forcemaster)git merge快进和快进有什么区别git rebase?难道两者都没有实现保持历史线性并且没有合并提交吗?如果是这样,为什么人们会使用其中一种而不是另一种?如果不是,我认为这是真的,那么我没有看到的整个故事是什么?
谢谢!
我定期从git获取看起来像这样的消息:
Your branch is behind the tracked remote branch 'local-master/master'
by 3 commits, and can be fast-forwarded.
Run Code Online (Sandbox Code Playgroud)
我希望能够在shell脚本中编写命令,可以执行以下操作:
如何判断我当前的分支是否可以从它正在跟踪的远程分支快进?
如何判断我的分支"后面"有多少提交?
如何通过一次提交快进,以便例如,我的本地分支将从"后面的3次提交"变为"后面的2次提交"?
(对于那些感兴趣的人,我正在尝试组合一个高质量的git/darcs镜像.)
我有这种情况:在一些testBranch上工作一段时间,我想与master同步,所以我做了git checkout testBranch和git merge master/testBranch
所以现在我的分支与master同步,但后来我发现我想撤消合并,问题是合并是用快进完成的,现在我的提交历史与主提交和testBranch提交混合,我不知道如何在我的testBranch上合并之前恢复到状态.
谢谢你的帮助
fast-forward ×10
git ×9
git-merge ×6
merge ×4
branch ×1
git-branch ×1
git-pull ×1
git-rebase ×1
github ×1
rebase ×1
squash ×1