我找不到有关提交时可见的几个选项(复选框)的文档。

我正在寻找squash来自 IDE 的所有提交的选项,我想知道这些选项中的一个是否无法帮助我做到这一点。是否有关于不同选项的官方文档?
也许我误解了GIT的工作原理。
我已经跑步了git rebase -i HEAD~10,我可以将10次提交压缩为一个。问题是所有压缩的提交仍然存在,并且我认为在将它们全部合并为一个之后,它们将被丢弃。
这是预期的结果吗?如果是这样,我是否可以重写历史记录以删除无用的提交(因为这些更改已经存在于以前所有提交已被压缩的提交中)?
初始场景:
A (master)
\
B - C - D (development)
Run Code Online (Sandbox Code Playgroud)
合并后我想要什么 --squash:
A - E (master/development)
\ /
B - C - D
Run Code Online (Sandbox Code Playgroud)
在分支上master,git log将是
commit E
Squashed commit of the following:
commit D
commit C
commit B
commit A
Run Code Online (Sandbox Code Playgroud)
继续在分支上开发development:
A - E (master)
\ / \
B - C - D F - G - H (development)
Run Code Online (Sandbox Code Playgroud)
再次与壁球合并:
A - E - I(master/development)
\ / \ /
B - C - D …Run Code Online (Sandbox Code Playgroud) 想象一个具有以下提交的 git 存储库:
Fixed issue 3 123eabc
Fixed issue 2 (part 2) fa23b79
Fixed issue 2 (part 1) 7bea5cc
Fixed issue 1 0d229f4
Run Code Online (Sandbox Code Playgroud)
这些都已推送到远程主服务器。现在有没有办法重写历史并将中间的两个合并为一个提交?就像是
Fixed issue 3 123eabc
Fixed issue 2 9d23e0c
Fixed issue 1 0d229f4
Run Code Online (Sandbox Code Playgroud) 我正在尝试压缩我的提交并将我的分支合并为一个提交来掌握。这就是我正在尝试的。我切换到主分支,然后我就这样做了
git merge --squash <branch_name>
Run Code Online (Sandbox Code Playgroud)
我得到
Automatic merge went well; stopped before committing as requested
Squash commit -- not updating HEAD
Run Code Online (Sandbox Code Playgroud)
之后我承诺。但这就是我得到的
$ git commit -m "Resolved"
On branch master
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)
由于某种原因,更改没有得到反映,我收到消息没有要提交的信息。我已经浏览了堆栈上的许多帖子和问题,但到目前为止没有任何帮助。
我确实尝试过浏览类似的主题,但我似乎无法掌握这个概念。
我分叉了一个仓库,做了一些更改。加班的时候,我也用过git fetch upstreamandgit merge upstream/<branch>几次。有时,我会解决并重新测试一些冲突。
现在,当涉及到将更改推送到上游时,我想进行一次提交。我得到的指示是使用git fetch upstream和git rebase -i upstream/<branch>。
我不明白的是,我再次陷入解决冲突的困境。我不明白为什么当我的叉子与它的起源相同时我需要解决冲突。我可以备份所有修改过的文件,核对我的分叉,再次分叉,恢复备份,这样我就没有冲突需要解决并准备提交。这个过程似乎很机械,我不明白为什么我必须走这条艰难的路(再次解决冲突)。
有人可以帮我理解吗?
我正在将几个相关的项目移动到一个 monorepo 中,保留每个项目的历史。
每个有问题的项目都有自己的回购。此外,每个项目的开发都严重依赖--no-ff合并,以便将主题分支重新集成到主分支中。
我已经尝试过shopsys/monorepo-tools并成功地制作了一个具有连接历史的 monorepo。
我还发现,大多数情况下,主题分支相当长,并且包含初始实施、审查修复和有时master -> topic合并的历史。当然,这些信息似乎是无关紧要的——只有使其变得master真正重要的变化。
所以我一直在考虑重写这些项目的历史,然后再将它们全部合并到一个 repo 中。我想从这个状态实现重写历史:
...
|
* Merge branch 'feature/XYZ'
|\
| * feature/XYZ#3 Review fixes part 2
| * feature/XYZ#2 Review fixes
| * feature/XYZ#1 Hack, hack, hack
|/
* Initial commit
Run Code Online (Sandbox Code Playgroud)
到这个状态:
...
|
* squashed: feature/XYZ#1 + feature/XYZ#2 + feature/XYZ#3
|
* Initial commit
Run Code Online (Sandbox Code Playgroud)
我想对历史上的每一次合并重复这一点。我想我必须使用git filter-branch,但我还不能完全理解它的多个选项,所以如果有人能将我推向正确的方向,我将非常感激。
在Git中,我可以使用交互式的基础来重写历史记录,这很棒,因为在我的功能分支中,我探索了不同的重构和完成方式时,使用部分有效的代码进行了大量提交。
在将分支重新合并或合并到master之前,我想将很多提交压缩在一起。
一些按从上到下的顺序排列提交
1. Initial commit on feature branch "Automatic coffee maker UI"
2. Add hot chocolate as product
3. Add tea as product. Products are now generic
4. Create in memory data store for adapter tests
5. Cry because I can't get entity framework to create a composite key. Integration tests broken.
6. Implemented composite key!!
7. All tests green and feature done!
Run Code Online (Sandbox Code Playgroud)
假设我要保留提交3、4和7。
使用变基我想“压扁”提交
理想情况下,我会在交互式基础中执行
1. squash
2. squash
3. pick (contains the work …Run Code Online (Sandbox Code Playgroud) 我有两个主要分支,staging并且master. 我有一些提交,并且我已将这些更改推送到一个分支,假设xyz其基本分支正在暂存,并为分支创建了拉取请求staging。所有这些提交都被压缩为一个提交。
是否可以挑选这个压缩的提交并将此挑选应用于从 开始的新分支master,以便我master也可以为分支创建相同的拉取请求。
git ×10
git-squash ×10
git-merge ×2
squash ×2
cherry-pick ×1
git-commands ×1
git-commit ×1
git-rebase ×1
git-reset ×1
github ×1
merge ×1