Questions tagged «git-rebase»

使用git-rebase命令,您可以从一个分支获取更改,然后在另一个分支的顶部重播它们。

8
从git / GitHub的历史记录中删除文件夹及其内容
我在GitHub帐户上的存储库上工作,这是我偶然发现的一个问题。 带有安装了几个npm软件包的文件夹的Node.js项目 包在node_modules文件夹中 将该文件夹添加到git存储库中,并将代码推送到github(当时不考虑npm部分) 意识到您并不需​​要该文件夹成为代码的一部分 删除该文件夹,将其推送 在那种情况下,总git repo的大小约为6MB,而实际代码(除该文件夹以外的所有代码)仅为300 KB左右。 现在,我最后要寻找的是一种从git的历史记录中删除该软件包文件夹的详细信息的方法,因此,如果有人对其进行了克隆,则无需下载价值6mb的历史记录,而只有这些文件才可以获取截至上一次提交将为300KB。 我为此找到了可能的解决方案,并尝试了这两种方法 从git存储库中删除文件(历史记录) http://help.github.com/remove-sensitive-data/ https://gist.github.com/1588371 Gist似乎在运行脚本后在哪里工作,它表明它删除了该文件夹,并表明修改了50个不同的提交。但这并没有让我推送该代码。当我尝试推动它时,它说Branch up to date但显示对50个提交进行了修改git status。其他2种方法也无济于事。 现在,即使显示它摆脱了该文件夹的历史记录,当我在本地主机上检查该存储库的大小时,它仍约为6MB。(我还删除了该refs/original文件夹,但没有看到存储库大小的变化)。 我要澄清的是,是否有一种方法不仅可以消除提交历史记录(这是我认为唯一发生的事情),而且可以摆脱那些git一直假设要回滚的文件。 可以说为此提供了一个解决方案,该解决方案已在我的本地主机上应用,但无法复制到该GitHub存储库,是否可以克隆该存储库,回滚到第一个提交执行该技巧并将其推送(或者这意味着git将还有所有这些提交的历史吗?-又名6MB)。 我的最终目标是从根本上找到从git摆脱文件夹内容的最佳方法,以便用户不必下载6MB的内容,而仍然可以拥有从未触及modules文件夹的其他提交(这很漂亮很多))在git的历史中。 我怎样才能做到这一点?
318 git  github  rebase  git-rebase 

3
将功能分支重新设置到另一个功能分支
我正在使用两个(专用)功能分支。 a -- b -- c <-- Master \ \ \ d -- e <-- Branch1 \ f -- g <-- Branch2 在这些分支上工作了一段时间之后,我发现需要在Branch1中的Branch2中进行更改。我想将Branch2中的更改重新基于Branch1。我想得出以下结论: a -- b -- c <-- Master \ d -- e -- f -- g <-- Branch1 我敢肯定,我需要第二分支衍合到第一,但我不完全确信正确的语法和分支我已签出。 这个命令会产生想要的结果吗? (Branch1)$ git rebase --onto Branch1 Branch2


15
在Git中的根提交之前插入提交?
我之前曾问过如何压缩 git存储库中的前两个提交。 尽管解决方案相当有趣,并且不像git中的其他某些东西那样令人费解,但如果您需要在项目开发过程中多次重复该过程,那么它们仍然会给我们带来很多伤害。 因此,我宁愿只经历一次痛苦,然后才能永远使用标准的交互式基础。 那么,我想做的是拥有一个空的初始提交,仅作为第一个提交而存在。没有代码,什么都没有。只是占用空间,因此它可以作为基础的基础。 那么我的问题是,拥有一个现有的存储库,我该如何着手在第一个空的提交之前插入一个新的空提交,并将其他所有人向前移动?

5
“自动打包存储库以获得最佳性能”是什么意思?
我的git仓库有问题。在过去的几天里,每当我推送到服务器时,我都会收到以下消息:“自动打包存储库以获得最佳性能”,并且它似乎并没有消失并返回外壳。 我还尝试签出到新分支,然后在我先前的分支上进行了重新设置,然后git gc删除了未使用的历史对象,然后进行了推送,但仍然出现此消息。请让我知道我的仓库正在发生什么。
225 git  git-rebase  git-push 

3
为特定文件(“我们的”,“我的”,“他们的”)选择Git合并策略
经过一阵子我正在重新扎根git pull --rebase。我有一些合并冲突的文件。如何接受特定文件的“他们”或“我的”更改? $ git status # Not currently on any branch. # You are currently rebasing. # (fix conflicts and then run "git rebase --continue") # (use "git rebase --skip" to skip this patch) # (use "git rebase --abort" to check out the original branch) # # Changes to …

8
结合Git仓库的前两个提交?
假设您有一个包含三个提交A,B和C的历史记录: A-B-C 我想将两个提交A和B合并到一个提交AB: AB-C 我试过了 git rebase -i A 这将打开我的编辑器,其中包含以下内容: pick e97a17b B pick asd314f C 我将其更改为 squash e97a17b B pick asd314f C 然后Git 1.6.0.4说: Cannot 'squash' without a previous commit 有办法还是这不可能?

5
重定一个Git合并提交
采取以下情况: 我在主题分支中有一些工作,现在可以合并回master了: * eb3b733 3 [master] [origin/master] | * b62cae6 2 [topic] |/ * 38abeae 1 我从母版执行合并,解决了冲突,现在有了: * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] * | eb3b733 3 [origin/master] |/ * 38abeae 1 现在,合并花费了我一些时间,因此我又进行了一次提取,并注意到远程主分支具有新的更改: * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 …

5
如何压缩两个非连续的提交?
我对git中的整个重新定位功能有些陌生。假设我做了以下提交: A -> B -> C -> D 之后,我意识到其中D包含一个修复程序,该修复程序依赖于中添加的一些新代码A,并且这些提交属于一起。如何壁球A和D一起休假B和C孤独?
182 git  git-rebase 

18
Git-如何修复“损坏的”交互式基础?
我设法在本地git存储库中创建了一个小混乱。我试图通过使用以下说明修复损坏的提交。在运行“ git commit --amend”之前(以及在git rebase --interactive之后),我认为更改不正确,因此我执行了“ git reset HEAD --hard”。我告诉你,这不是一个好主意。 现在,交互式资源库似乎“卡住了”。Git将当前分支显示为(| REBASE-m)。我的存储库中的每个命令(cd ..,ls,git rebase ...)都给出以下错误: cat:.git / rebase-merge / head-name:没有这样的文件或目录 这是git rebase --abort的样子: $ git rebase --abort cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory cat: c:/_work/project/src/git/.git/rebase-merge/head-name: No such file or directory cat: c:/_work/project/src/git/.git/rebase-merge/orig-head: No such file or directory HEAD is …
182 git  msysgit  git-rebase 

7
我不明白git rebase --onto的行为
我注意到以下git命令的两个块具有不同的行为,我不理解为什么。 我有一个分支A与一个B分支commit ---COMMIT--- (A) \ --- (B) 我想以B最新的分支为基础A(并在分支上提交B) ---COMMIT--- (A) \ --- (B) 如果我做的话没问题: checkout B rebase A 但是,如果我这样做: checkout B rebase --onto B A 它根本不起作用,什么也没发生。我不明白为什么两种行为是不同的。 phpstorm git client使用第二种语法,对我来说似乎完全坏了,这就是为什么我要这个语法问题。
169 git  git-rebase 

4
git rebase而不更改提交时间戳
git rebase在保留提交时间戳的同时执行是否有意义? 我相信后果是新分支不一定按时间顺序排列提交日期。从理论上讲这完全可能吗?(例如,使用管道命令;只是在这里感到好奇) 如果理论上可行,那么实践中是否有可能重新设置基准而不更改时间戳? 例如,假设我有以下树: master <jun 2010> | : : : oldbranch <feb 1984> : / oldcommit <jan 1984> 现在,如果我oldbranch依据的话master,提交的日期将从1984年2月更改为2010年6月。是否可以更改该行为,以便不更改提交时间戳记?最后,我将获得: oldbranch <feb 1984> / master <jun 2010> | : 那完全有意义吗?甚至在git中允许有一个历史记录,其中旧提交作为父提交具有较新的提交?


3
如何为git rebase选择合并策略?
git-rebase手册页中提到的内容-X<option>可以传递给git-merge。何时/究竟如何? 我想通过应用修补程序与变基递归策略和他们的选项(适用任何棒,而不是跳过整个冲突的提交)。我不想合并,我想使历史线性化。 我试过了: git rebase -Xtheirs 和 git rebase -s 'recursive -Xtheirs' 但是git -X在两种情况下都拒绝。 git rebase -Xtheirs在最新版本中有效,除了树冲突需要手动解决。解决这些冲突后,您需要运行git rebase -Xtheirs --continue(-X重复)。
147 git  git-rebase 

6
当我只压缩提交时,为什么git-rebase给我合并冲突?
我们有一个包含400多个提交的Git存储库,其中前几十个是反复试验的。我们希望通过将许多压缩成一个提交来清理这些提交。自然地,git-rebase似乎是要走的路。我的问题是它最终会导致合并冲突,并且这些冲突不容易解决。我不明白为什么根本不应该有任何冲突,因为我只是挤压提交(而不是删除或重新排列)。这很可能表明我不完全理解git-rebase是如何进行南瓜的。 这是我正在使用的脚本的修改版本: repo_squash.sh(这是实际运行的脚本): rm -rf repo_squash git clone repo repo_squash cd repo_squash/ GIT_EDITOR=../repo_squash_helper.sh git rebase --strategy theirs -i bd6a09a484b8230d0810e6689cf08a24f26f287a repo_squash_helper.sh(此脚本仅由repo_squash.sh使用): if grep -q "pick " $1 then # cp $1 ../repo_squash_history.txt # emacs -nw $1 sed -f ../repo_squash_list.txt < $1 > $1.tmp mv $1.tmp $1 else if grep -q "initial …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.