我试图将2个提交合并为1,所以我从git准备好跟随"压缩提交与rebase".
我跑了
git rebase --interactive HEAD~2
Run Code Online (Sandbox Code Playgroud)
在生成的编辑器中,我更改pick为squash然后保存退出,但是rebase因错误而失败
没有先前的提交,不能'挤压'
既然我的工作树已达到这种状态,我就无法恢复了.命令git rebase --interactive HEAD~2失败
交互式rebase已经开始
并git rebase --continue失败了
没有先前的提交,不能'挤压'
我有一个远程Git服务器,这是我想要执行的场景:
对于每个bug /功能,我创建了一个不同的Git分支
我继续使用非官方的Git消息在Git分支中提交我的代码
在顶级存储库中,我们必须使用官方Git消息对一个错误进行一次提交
那么如何将我的分支合并到远程分支,以便他们只为我的所有签到提交一个提交(我甚至想为此提供提交消息)?
这个问题不仅涉及如何完成这项任务,还涉及使用Git这样做是好还是坏.
考虑到本地我在master分支上工作最多,但我创建了一个我称之为"topical_xFeature"的主题分支.在处理"topical_xFeature"并在主分支上来回切换的过程中,事实证明我在"topical_xFeature"分支上进行了多次提交,但在每次提交之间,我没有做过推.
首先,你会考虑这种不良做法吗?每次推送每个分支坚持一次提交是不是更明智?在什么情况下,在推送之前在分支上进行多次提交会很好?
其次,如何才能最好地将topical_xFeature分支上的多个提交引入主分支以进行推送?不担心它并且只是推动多个提交被推送的推动是否是令人讨厌的,或者以某种方式将提交合并为一个然后推送不那么烦人?再说一遍,怎么做?
我在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) 我想在分支中间将几个提交压缩在一起而不修改前后的提交.
我有 :
A -- B -- C -- D -- E -- F -- G
| |
master dev
origin/master
Run Code Online (Sandbox Code Playgroud)
我想把它压成
A -- H -- E -- F -- G
| |
master dev
origin/master
Run Code Online (Sandbox Code Playgroud)
在哪里H相当于B -- C -- D.我希望能够指定提交消息H.A是最后一次提交,因此所有提交后都可以重写,而不会弄乱服务器.我的想法是在快进之前清理历史master.
我怎样才能做到这一点 ?
PS:请注意,在我的情况下,我实际上有超过3次提交在中间压缩,但如果我能用3做,我应该能够做更多.
PPS:另外,如果可能的话,我更喜欢一个解决方案E,F并且G保持不变(主要是关于提交日期).
我有一个全新的git repo.它有三个提交.
我想将它们挤在一起,这样我的项目历史看起来很干净,而其他人则看不到我的hacky提交.
显然没有其他人看过回购,因为它是全新的,所以改变历史不是问题.我是唯一的用户.
但是git rebase -i要我跟踪一个上游分支.在我整理git日志之前,我不想发布任何内容.
如何在不跟踪上游的情况下进行交互式rebase或压缩提交?
让我们说我的本地git log节目:
739b36d3a314483a2d4a14268612cd955c6af9fb a
...
c42fff47a257b72ab3fabaa0bcc2be9cd50d5c89 x
c4149ba120b30955a9285ed721b795cd2b82dd65 y
dce99bcc4b79622d2658208d2371ee490dff7d28 z
Run Code Online (Sandbox Code Playgroud)
我的遥控器git log显示:
c4149ba120b30955a9285ed721b795cd2b82dd65 y
dce99bcc4b79622d2658208d2371ee490dff7d28 z
Run Code Online (Sandbox Code Playgroud)
什么是最简单的方法(假设任意大量的本地提交):
527b5810cfd8f45f18ae807af1fe1e54a0312bce a ... x
c4149ba120b30955a9285ed721b795cd2b82dd65 y
dce99bcc4b79622d2658208d2371ee490dff7d28 z
Run Code Online (Sandbox Code Playgroud) 我git subtree用来组织我的git存储库.假设我有一个名为的主存储库repo和一个名为的库lib.
我lib通过压缩它的历史成功地"导入"了存储库.我现在想lib通过压缩历史来回馈.这似乎不起作用:我指定--squash选项,git subtree push但在查看历史记录时,我仍然发送所有提交.
这是一个脚本,显示了重现问题所需的最小命令:
#!/bin/bash
rm -rf lib lib-work repo
# repo is the main repository
git init repo
# lib is the 'subtreed' repository (bare to accept pushes)
git init --bare lib
git clone lib lib-work
cd lib-work
# adding a bunch of commits to lib
echo "v1" > README
git add README
git commit -m 'lib commit 1'
echo "v2" > …Run Code Online (Sandbox Code Playgroud) git pull origin mastergit add .git commit -m "bug x fixed"我应该再次添加它们吗?我应该删除最后一次提交并进行新的提交吗?或者是什么?
我的分支中有以下提交。
我怎么能把提交 3 和 2 结合起来,但是提交 2 的提交消息。这是我期待的结果
git ×11
squash ×4
git-squash ×3
git-merge ×2
command-line ×1
git-push ×1
git-rebase ×1
git-subtree ×1
github ×1
pull-request ×1
push ×1
workflow ×1