正如标题所说,我并不清楚a git merge --squash和a 之间的区别git merge --no-commit.
据我所知的帮助页面git merge,这两个命令都会让我进入一个更新的工作树,在那里它仍然可以编辑然后进行最后的提交(或多次提交).
有人可以澄清这两个选项的差异吗?我什么时候使用一个而不是另一个?
我在GitHub上发了一个pull请求.现在,存储库的所有者正在说要将所有提交压缩成一个.
当我键入git rebase -iNotepad打开时,其中包含以下内容:
noop
# Rebase 0b13622..0b13622 onto 0b13622
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# …Run Code Online (Sandbox Code Playgroud) 我希望有一个简单的解决方案,可以在交互式rebase期间将两个合并提交压缩在一起.
我的存储库看起来像:
X --- Y --------- M1 -------- M2 (my-feature)
/ / /
/ / /
a --- b --- c --- d --- e --- f (stable)
Run Code Online (Sandbox Code Playgroud)
也就是说,我有一个my-feature最近合并过两次的分支,中间没有真正的提交.我不只是想重新定义my-feature分支,因为它是它自己的已发布分支,我只想将最后两个合并提交压缩成一个(还没有发布那些提交)
X --- Y ---- M (my-feature)
/ /
/ /
a --- ... -- f (stable)
Run Code Online (Sandbox Code Playgroud)
我试过了:
git rebase -p -i M1^
Run Code Online (Sandbox Code Playgroud)
但我得到了:
Refusing to squash a merge: M2
Run Code Online (Sandbox Code Playgroud)
我最后做的是:
git checkout my-feature
git reset --soft HEAD^ # remove the last commit (M2) but keep the changes …Run Code Online (Sandbox Code Playgroud) 在Docker 1.13中添加了新的--squash参数.
我现在希望减小图像的大小,以及能够"隐藏"我的图层中的秘密文件.
现在,您可以看到使用和不使用--squash参数进行构建的区别.
没有壁球
用壁球
现在问我的问题.
如果我在第一层中添加一个秘密文件,那么在我的第二层中使用秘密文件,最后在第三层中删除我的秘密文件,然后使用--squash标志进行构建.
现在有办法得到秘密文件吗?
对我们来说,一个常见的开发工作流程是checkout分支b,向它提交一堆,然后将所有这些提交压缩成一个(仍在b).
但是,在rebase -i压缩所有提交的过程中,经常会出现多个步骤的冲突.
我本质上希望将分支更改为一个提交,该提交表示最终提交时存储库的状态 b
我做了一些搜索,但我还没找到我正在寻找的东西.我不想,merge --squash因为我们想在合并之前测试压扁的功能分支.
我正在尝试将我的所有提交从当前分支重新压缩并压缩到主分支.这是我正在尝试做的事情:
git checkout -b new-feature
Run Code Online (Sandbox Code Playgroud)
在我尝试之后做了几次提交:
git rebase -i master
Run Code Online (Sandbox Code Playgroud)
在这种情况下,提交将保留在new-feature分支中
git checkout master
git rebase -i new-feature
Run Code Online (Sandbox Code Playgroud)
它给我和编辑带有noop消息的窗口.
我知道命令:
git merge --squash new-feature
Run Code Online (Sandbox Code Playgroud)
但我正在努力学习rebase命令.
如果我在以下情况,
$ git log --oneline
* abcdef commit #b
* 123456 commit #a
Run Code Online (Sandbox Code Playgroud)
我知道我总能跑
$ git reset HEAD~
$ git commit --amend
Run Code Online (Sandbox Code Playgroud)
但是,我试着跑
$ git rebase -i HEAD~2
Run Code Online (Sandbox Code Playgroud)
但我明白了
fatal: Needed a single revision
invalid upstream HEAD~2
Run Code Online (Sandbox Code Playgroud)
因此我的问题是:有没有办法git rebase用来压缩这两个提交?
我正在尝试使用git merge --squash和--no-ff参数,但是git不允许.有人有任何消化帮助我吗?
我不能使用快进合并,我需要使用--squash参数来分组在另一个分支中进行的大量提交.
谢谢!
git branch --merged 似乎没有--squash很好地发挥.
如果你正常git merge,那么git branch --merged告诉你合并了哪些分支.但是,如果使用--squash选项,即使生成的树相同,也不是这种情况.
我怀疑这是一个git缺陷,想知道是否有一些git-fu我错过了,或者我是否误解了一些东西.
简而言之:我想使用--squash,但也希望git告诉我,我压扁的另一个分支是否已经过了.
当我正在处理新代码时,我会做很多小提交来跟踪我的更改.但是,我的公司更喜欢在一次提交中提交每个功能.所以解决方案是将我的整个分支压缩到一个提交.
我怎么压扁整个分支而不使用git rebase --interactive,然后改变pick到squash对所有提交?
squash ×10
git ×9
rebase ×4
merge ×3
branch ×1
docker ×1
dockerfile ×1
git-merge ×1
git-squash ×1
github ×1
interactive ×1
pull-request ×1