你正在绊倒一堆轻微的刺激,我用git,所有在同一时间。这实际上是一个好兆头。 :-)
首先,rebase有“重新绑定”根提交的问题。在合理的现代版本中,你可以使用git rebase -i --root
来做到这一点,它可以让你压缩或修复第二次提交到第一次(根)提交。你需要这个--root
参数。 (GIT的老版本没有--root
,使这实质上更困难。)
下一页:
有什么不同取南瓜
在一个互动变基之间,pick
的意思是“取提交原样“,并且squash
的意思是”在上一次提交之前添加此提交“。 squash
和fixup
之间没有本质区别,只是前者给你一个编辑提交消息的机会,而后者只是将“fixup”作为树更改(完全抛弃提交消息文本)。
的区别是什么提交和分支
一个提交是在仓库里的一个实际的对象之间。 “分支”是一个不明确的术语,它有时候意味着“分支标签” - 它只是对提交的引用,或者等同于对单个提交的名称 - 有时意味着数据结构由以下形式组成:承诺与他们的亲子关系。
有人说是“混帐更有意义,当你理解X”,为X许多不同的值。这个概括为“一旦你理解git,git变得更有意义。” :-)实际上,这不仅仅是重复意义上的事实,而且在帮助你达到目标方面没有多大的帮助!幸运的是this web series是非常有用的(在我看来)。通读这一切,“分支”模糊的方式,但通常很明显,某人意味着什么,可能会更有意义。
编辑:例如会话:
$ cd /tmp/trepo
$ git init
Initialized empty Git repository in /tmp/trepo/.git/
$ echo data > somefile; git add somefile; git commit -m 'first check in'
[master (root-commit) 64a2d9f] first check in
1 file changed, 1 insertion(+)
create mode 100644 somefile
$ echo other > another-file; git add another-file
$ git commit -m 'combine with first check in'
[master d375b81] combine with first check in
1 file changed, 1 insertion(+)
create mode 100644 another-file
$ git rebase -i --root
[in editor, change second line from "pick" to "fixup"; write and quit]
".git/rebase-merge/git-rebase-todo" 20L, 667C written
[detached HEAD 5b2a979] first check in
2 files changed, 2 insertions(+)
create mode 100644 another-file
create mode 100644 somefile
Successfully rebased and updated refs/heads/master.
$ git log --oneline
5b2a979 first check in
注意另一个小混帐刺激:git log
显示在新对旧秩序的承诺,但git rebase -i
显示他们在新的旧到新秩序。
而且:如果你有push
ed,那么遥控器有旧的提交,而不是新的提交。所以你会看到两个旧的,可以通过origin/master
(假设遥控器命名为origin
,你使用的是通常的设置)和(单个)新的,可以通过master
到达。您必须通过git push -f
(具有其所有后果...)才能使远程回购采取新的master
。
这是我收到的最好的答案之一!我在Git中看到的一个严重问题是,您必须降低您对该工具支持的期望。像我想要做的事情应该是简单的,但也有例外。你会把你的头撞在墙上几个小时,直到你发现它不支持你想要做的事。我认为这是一个巨大的失败,因为它的复杂性隐藏了它的可用性,错误和缺乏功能。 –
@ user148298:Git可以(我发现)实际上完成了大部分人想要的事情;只是它的界面几乎是以各种方式积极地“初学者 - 敌对”。例如,基础设施问题的出现是因为在其核心上,“基础设施”确实希望将新的提交*放在某个东西上,所以它不会让你“重新定位”一个不“任何东西”的根提交,因此不会让你挤压第二次提交,这被视为第一次提交。现在已经通过'--root'结尾了,但是不应该真的需要*'--root'。 – torek
从技术意义上讲,它非常有意义,但从用例来看,它令人难以置信地不知所措。谈论漏洞抽象! 我在同一个盒子上运行TortoiseGit,Git Gui,VS Git Plugin,Windows Cmd Git Shell,Bash Shell和PowerShell。为什么?所以如果我不能找到如何做到这一点,我可以尝试在其他人上做。 “初学者”是一个误称,因为它隐藏了一些人从未走出初级阶段的事实。它应该被称为“被滥用的用户”。现在,我试图找出为什么Git不添加我的空资产文件夹,所有路径都导致我缺乏对此的支持。 –