标签: rebase

撤消git rebase

有谁知道如何轻松撤消git rebase?

想到的唯一方法是手动进行:

  • git checkout两个分支的提交父级
  • 然后从那里创建一个临时分支
  • 樱桃 - 手工挑选所有提交
  • 用手动创建的分支替换我重新定位的分支

在我目前的情况下,这是可行的,因为我可以很容易地发现两个分支的提交(一个是我的东西,另一个是我的同事的东西).

然而,我的方法让我感到不理想和容易出错(假设我刚刚用自己的2个分支重新定位).

有任何想法吗?

澄清:我正在谈论一个rebase,在此期间重播了一堆提交.不仅仅是一个.

git undo rebase git-rebase

2965
推荐指数
15
解决办法
92万
查看次数

Git拒绝合并关于rebase的无关历史

git rebase origin/development以下错误消息从git显示:

fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Run Code Online (Sandbox Code Playgroud)

我的git版本是2.9.0.用于在以前的版本中正常工作.

如何通过新版本中引入的强制标记继续使用此rebase,从而允许不相关的历史记录?

git rebase

1862
推荐指数
25
解决办法
123万
查看次数

在Git中压缩前两个提交?

随着git rebase --interactive <commit>你能够压制任意数量的提交连成一个单一的一个.

除非你想将提交压缩到初始提交中,否则这一切都很棒.这似乎是不可能的.

有没有办法实现它?


中度相关:

在一个相关的问题中,我设法提出了一种不同的方法来解决第一次提交的问题,这也就是说,它是第二次提交.

如果您有兴趣:git:如何插入提交作为第一个,转移所有其他?

git rebase git-rebase squash

529
推荐指数
5
解决办法
15万
查看次数

用Git更改项目的第一次提交?

我希望在我的项目的第一次提交中更改某些内容而不会丢失所有后续提交.有没有办法做到这一点?

我不小心在源代码中的评论中列出了我的原始电子邮件,我想改变它,因为我从机器人索引GitHub收到垃圾邮件.

git rebase git-filter-branch

476
推荐指数
3
解决办法
12万
查看次数

476
推荐指数
9
解决办法
16万
查看次数

git cherry-pick说"...... 38c74d是合并但没有给出-m选项"

我在我的主分支中做了一些更改,并希望将这些更改带到上游.当我樱桃挑选以下提交但是我被卡在fd9f578上,其中git说:

$ git cherry-pick fd9f578
fatal: Commit fd9f57850f6b94b7906e5bbe51a0d75bf638c74d is a merge but no -m option was given.
Run Code Online (Sandbox Code Playgroud)

git试图告诉我什么是樱桃挑选正确的东西在这里使用?主分支确实包含对上游分支中已修改的文件的更改,因此我确信会出现一些合并冲突,但这些并不是很难理解.我知道哪些地方需要改变.

这些是我想要上传的提交.

e7d4cff added some comments...
23e6d2a moved static strings...
44cc65a incorporated test ...
40b83d5 whoops delete whitspace...
24f8a50 implemented global.c...
43651c3 cleaned up ...
068b2fe cleaned up version.c ...
fd9f578 Merge branch 'master' of ssh://extgit/git/sessions_common
4172caa cleaned up comments in sessions.c ...
Run Code Online (Sandbox Code Playgroud)

git merge rebase cherry-pick

462
推荐指数
5
解决办法
26万
查看次数

如何将所有git提交压缩成一个?

你如何将整个存储库压缩到第一次提交?

我可以重新设置第一次提交,但这会让我有2次提交.有没有办法在第一个之前引用提交?

git rebase git-rebase squash git-rewrite-history

427
推荐指数
17
解决办法
20万
查看次数

在git中,merge --squash和rebase之间有什么区别?

我是git的新手,我正在努力理解壁球和篮板之间的区别.根据我的理解,你做一个篮板时做一个壁球.

git merge rebase git-rebase squash

336
推荐指数
5
解决办法
13万
查看次数

如何在冲突的Git rebase中获得"他们的"变化?

我有分支冲突,branch2从branch1分支.

让我们说当重新定位branch2当前branch1,同时解决冲突时,我决定按原样采用一些(不是全部)"他们的"(即branch1)文件.我怎么做?

我试过了:

git checkout branch1:foo/bar.java
fatal: reference is not a tree: TS-modules-tmp:foo/bar.java

git checkout refs/heads/branch1:foo/bar.java
fatal: reference is not a tree: refs/heads/TS-modules-tmp:foo/bar.java
Run Code Online (Sandbox Code Playgroud)

git rebase git-rebase

330
推荐指数
2
解决办法
16万
查看次数

从git/GitHub的历史记录中删除文件夹及其内容

我正在使用我的GitHub帐户上的存储库,这是我偶然发现的一个问题.

  • Node.js项目包含一个安装了几个npm软件包的文件夹
  • 包裹在node_modules文件夹中
  • 将该文件夹添加到git repository并将代码推送到github(当时没有想到npm部分)
  • 意识到你并不真的需要该文件夹成为代码的一部分
  • 删除了那个文件夹,推了它

在那个例子中,总git repo的大小约为6MB,其中实际代码(除了该文件夹之外的所有代码)只有大约300 KB.

现在我正在寻找的是从git的历史中删除该包文件夹的细节的一种方法,所以如果有人克隆它,他们不必下载6mb的历史记录,他们将获得唯一的实际文件截至上次提交时将为300KB.

我查找了可能的解决方案并尝试了这两种方法

Gist似乎在运行脚本之后起作用,它表明它摆脱了该文件夹,之后它显示了50个不同的提交被修改.但它没有让我推动那些代码.当我试图推它时,它说,Branch up to date但显示50个提交被修改了一个git status.其他两种方法也没有帮助.

现在即使它显示它摆脱了该文件夹的历史记录,当我在我的localhost上检查该repo的大小时,它仍然是大约6MB.(我也删除了refs/original文件夹,但没有看到repo大小的变化).

我要澄清的是,如果有一种方法可以摆脱提交历史(这是我认为发生的唯一事情),而且那些文件git保持假设一个人想要回滚.

让我们说一个解决方案是为此而呈现并应用于我的localhost但不能复制到该GitHub仓库,是否有可能克隆该repo,回滚到第一个提交执行技巧并推送它(或者这是否意味着git将仍然有所有这些提交的历史? - 又名.6MB).

我的最终目标是基本上找到从git中删除文件夹内容的最佳方法,这样用户就不必下载6MB的东西,仍然可能有其他提交从未触及过模块文件夹(那很漂亮)他们中的所有人都在git的历史中.

我怎样才能做到这一点?

git github rebase git-rebase

284
推荐指数
7
解决办法
9万
查看次数