随着git rebase --interactive <commit>你能够压制任意数量的提交连成一个单一的一个.
除非你想将提交压缩到初始提交中,否则这一切都很棒.这似乎是不可能的.
有没有办法实现它?
在一个相关的问题中,我设法提出了一种不同的方法来解决第一次提交的问题,这也就是说,它是第二次提交.
如果您有兴趣:git:如何插入提交作为第一个,转移所有其他?
有办法从以后的提交中更改消息:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
Run Code Online (Sandbox Code Playgroud)
如何更改第一次提交(没有父级)的提交消息?
假设您有一个包含三个提交A,B和C的历史记录:
A-B-C
Run Code Online (Sandbox Code Playgroud)
我想将两个提交A和B组合到一个提交AB:
AB-C
Run Code Online (Sandbox Code Playgroud)
我试过了
git rebase -i A
Run Code Online (Sandbox Code Playgroud)
这打开了我的编辑器,其中包含以下内容:
pick e97a17b B
pick asd314f C
Run Code Online (Sandbox Code Playgroud)
我改成这个
squash e97a17b B
pick asd314f C
Run Code Online (Sandbox Code Playgroud)
然后Git 1.6.0.4说:
Cannot 'squash' without a previous commit
Run Code Online (Sandbox Code Playgroud)
有办法还是不可能?
我想在这个git存储库中定义一个新的"root"分支."root"分支是指完全独立于存储库1中所有其他分支的分支.
不幸的是,甚至在Arepo的提交树的基础上提交(让我们称之为)包含很多文件(这是一个在已经相当成熟的项目上初始化的存储库).
这意味着即使我A作为新分支提供<start-point>,这个新分支也不会从"干净的平板"开始,而是包含所有提交的文件A.
有没有什么方法可以在这个存储库中创建一个完全裸的分支,<start-point>尽可能接近A?
1 BTW,这不等于创建一个新的回购.由于很多原因,单独的回购将不太方便.
编辑:好的,这是我做的,基于vcsjones的回答:
# save rev of the current earliest commit
OLDBASE=$(git rev-list --max-parents=0 HEAD)
# create a new orphan branch and switch to it
git checkout --orphan newbranch
# make sure it's empty
git rm -rf .
# create a new empty commit in the new branch, and
# save its rev in NEWBASE
git commit …Run Code Online (Sandbox Code Playgroud) Git有一个众所周知的,或者至少是众所周知的空树,其SHA1是:
4b825dc642cb6eb9a060e54bf8d69288fbee4904
Run Code Online (Sandbox Code Playgroud)
(你可以在任何仓库中看到这个,甚至是新创建的仓库,用git cat-file -t和git cat-file -p).
如果您努力工作并且非常小心,您可以使用这个空树来存储没有文件的目录(请参阅如何将空目录添加到git存储库的答案),尽管这不是一个好主意.
它作为一个参数更有用git diff-tree,其中一个示例钩子可以做到.
我想知道的是,
4b825dc642cb6eb9a060e54bf8d69288fbee4904? (创建符号名称的快速而肮脏的方法是将SHA1放入,例如,.git/Nulltree不幸的是,您必须为每个repo执行此操作.似乎更好地将幻数放在脚本中等等.我只是有一般的厌恶到魔术数字.)
我有一个小项目,我工作,没有任何形式的版本控制软件,和我结束了三个不同版本的同一个脚本,在那里每个人做了从别人略有不同.我用其中一个版本初始化了一个git repo,我真的很愿意在没有父母的情况下让其他两个版本中的每个版本.这样,我可以合并差异,就好像脚本的三个版本中的每一个都是不同分支的提示一样.
我甚至不能确定这是否是一定要着手解决这个问题,一个理智的或合理的方式......如何在一个更好的方式来处理这种情况这样做事,或者建议任何意见,将不胜感激.
当我开始我的git repo时,我提交了一些文件作为初始提交.现在,很多提交后来,我注意到我在这些文件中包含了一条信息,其中包含我不想发布的信息(与其他代码不同).所以我想删除/更改这一行并保留其余的代码.
在我周围搜索我找到了这个解决方案:插入一个空提交作为初始提交(这里描述:在Git中根提交之前插入一个提交?),对它做一个rebase,然后通过修改编辑旧的第一次提交.不幸的是,在rebase期间出现了许多残酷的合并冲突(如下所述:git:解决由rebase引起的冲突).
有没有不同的方法来解决我的问题,或者必须手动变基和编辑所有冲突?
提前致谢 :)
我在互联网上搜索了几个小时,找不到解决这个问题的方法:
我想创建一个GitHub名为的新分支release.这个分支需要是空的!但是有一个现有的分支与x提交,我不想拥有它commit history.
我找到的唯一方法是创建一个本地 --orphan分支
提前致谢 ;)
情况如下:
我们有一些项目坚持Github,并将其部署到Heroku,后者有自己的mini-Git.一些更改直接应用于Heroku(来自Heroku的克隆存储库,进行了更改并推送).与此同时,Github上的主分支也获得了一些变化.
现在,当我想将主存储库推送到Heroku时,推送失败,因为Heroku上的提交与本地提交不同步.
我不想与Heroku的变化合并 - 我只是希望它们消失.
有没有办法清理Heroku上的git仓库,从一开始就推送我的本地仓库?
我不想破坏应用程序并重新创建它,因为它有一些付费服务,我只是一个合作者.
两个问题:
我试图在所有提交之前提交一个提交.
最底层的提交有660fb2a76211f36ec9a67d0454a90eab469e9fd0SHA.当我输入git rebase -i 660fb2a76211f36ec9a67d0454a90eab469e9fd0每个提交但最后一个提交显示在列表中.
我真的需要这个提交出现所以我可以把第一个提交作为最后一个!
当我把第一个提交作为第一个提交在列表中时(意思是第二个提交总共,因为第一个提交不在上面提到的列表中)我得到一个错误:error: could not apply b722c76... v1.4.3 BEAT release
我只是从列表的底部剪切并放入它到顶部!我没有改变号码!
我也试了好几次.同样的结果.
到目前为止就是这样.如果您有疑问请继续问!
我刚刚发现了我项目的旧备份.这些备份是在我使用git之前创建的.
我现在想将它们作为旧提交添加到我的存储库中.这意味着我必须将这些提交放在所有其他提交之前.
现在有几个问题:
如果不清楚,请提及.我会解决这个问题!
最后一件事:
我已经在GitHub上发布了这个.我主要使用他们的软件来提交提交.那我怎么把它推回GitHub呢?
git ×10
git-rebase ×3
commit ×2
git-amend ×2
github ×2
rebase ×2
backup ×1
git-commit ×1
heroku ×1
repository ×1
reset ×1
squash ×1