相关疑难解决方法(0)

删除特定提交

我和一位朋友在一个项目上合作,他编辑了一堆本不应该编辑过的文件.不知怎的,我将他的作品合并到了我的作品中,或者当我拉动它时,或者当我试图选择我想要的特定文件时.我一直在寻找和玩很长一段时间,试图弄清楚如何删除包含对这些文件的编辑的提交,它似乎是revert和rebase之间的折腾,并没有简单的例子,并且docs假设我比我知道的更多.

所以这是问题的简化版本:

鉴于以下情况,如何删除提交2?

$ mkdir git_revert_test && cd git_revert_test

$ git init
Initialized empty Git repository in /Users/josh/deleteme/git_revert_test/.git/

$ echo "line 1" > myfile

$ git add -A

$ git commit -m "commit 1"
[master (root-commit) 8230fa3] commit 1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 myfile

$ echo "line 2" >> myfile

$ git commit -am "commit 2"
[master 342f9bb] commit 2
 1 files changed, 1 insertions(+), 0 deletions(-)

$ echo "line 3" >> myfile

$ …
Run Code Online (Sandbox Code Playgroud)

git commit revert cherry-pick

260
推荐指数
7
解决办法
27万
查看次数

如何在保持更改的同时从Git存储库中删除选定的提交日志条目?

我想从线性提交树中删除选定的提交日志条目,以便条目不会显示在提交日志中.

我的提交树看起来像:

R--A--B--C--D--E--HEAD
Run Code Online (Sandbox Code Playgroud)

我想删除B和C条目,以便它们不会在提交日志中显示,但应保留从A到D的更改.也许通过引入一个提交,使B和C成为BC并且树看起来像.

R--A--BC--D--E--HEAD
Run Code Online (Sandbox Code Playgroud)

或者,理想情况下,A直接来自D.D'表示从A到B,B到C和C到D的变化.

R--A--D'--E--HEAD
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果有,怎么样?

这是一个相当新的项目,因此目前没有分支,因此也没有合并.

git commit

239
推荐指数
5
解决办法
20万
查看次数

如何git使用SHA恢复提交

如何使用GIVEN SHA恢复提交?我只是想用给定的SHA删除更​​改?我希望在给出SHA之前和之后保留所有提交的内容.我只想删除指定SHA的更改.

我已经在Git中了一个SHA哈希提交的Revert?,我的理解是重置所有提交后我想要恢复的SHA.这不是我想要的方式.

git

19
推荐指数
1
解决办法
2万
查看次数

是否有可能在不丢失合并信息的情况下重写分支的历史记录?

我们有一个主分支,我们已经合并了大约10个功能分支,一次一个.

所以最近的历史看起来像这样:

merged feat/10 (HEAD of master)
merged feat/9
merged feat/8
merged feat/7
merged feat/6
merged feat/5
...
Run Code Online (Sandbox Code Playgroud)

现在我们发现这feat/7很糟糕,我们想把它从主人那里拿走.恢复合并提交是不够的,因为我们根本不希望破坏的提交存在于我们的历史记录中.我们不能真正使用交互式rebase,因为这将使历史变得平坦,使其看起来好像是在一个分支上完成的,并且我们希望保留所有良好的合并历史记录.

有没有办法从分支的历史中删除特定的合并提交?

我会注意到真实的历史要比你在上面的例子中看到的要复杂得多,所以手动重新进行所有的合并,因为feat/7不是一个好的选择.

编辑

为了澄清那些投票将其作为一个副本关闭的人:这不是关于如何使用rebase进行提交的常见问题解答,当然这已被多次回答.这里的问题是关于在没有展平合并历史的情况下进行提交.

git

6
推荐指数
1
解决办法
250
查看次数

git push heroku - 停止heroku推送/上传大量文件

在我的工作目录中意外地放了一个非.gitignore排除的大文件我提交了我的更改,推送到github然后做了一个git push heroku到生产.

当我看到它试图将数百MB的数据推送到heroku时,我杀死了这个过程.

因为我已经做了 git rm filename.extension 之后 git add .,一个新的承诺和混帐推.但是,当我到达git push heroku它坚持继续推动这个不可能的大数据文件.

我如何检查有问题的文件是什么,以及如何让git/heroku忘记它曾经存在,所以git push heroku可以重新开始工作......?

谢谢!

git ruby-on-rails github heroku

2
推荐指数
1
解决办法
940
查看次数

为什么我的 rebase 没有做任何事情?

这个项目只有一个master分支,所以所有的工作都在那里完成。

我错误地犯了一个错字,虽然我可以提交撤消,但我想我会尝试完全删除提交。

提交哈希是dbcbf96b,并且ded82215是它之前的提交。因此,根据这些说明,我这样做了:

  1. git rebase -i ded82215
  2. 这在编辑器中显示了“待办事项”列表,如预期的那样,仅包含以下内容:

    pick dbcbf96 Writer update.
    
    Run Code Online (Sandbox Code Playgroud)
  3. 大概是按照该生成文件的注释中的说明,我将该行更改为:

    drop dbcbf96 Writer update.
    
    Run Code Online (Sandbox Code Playgroud)
  4. 我保存了文件并关闭了编辑器。然后它说:

    Successfully rebased and updated refs/heads/master.
    
    Run Code Online (Sandbox Code Playgroud)
  5. 然后我检查了 GitLab(我用来托管它的东西)希望看到提交消失了,但事实并非如此,它仍然存在。

  6. 我确实git status查看了它推荐的操作并产生了:

    On branch master
    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
      (use "git pull" to update your local branch)
    nothing to commit, working tree clean
    
    Run Code Online (Sandbox Code Playgroud)
  7. 这有点道理,但至于变基,我不确定发生了什么。现在我确实git pull更新了本地存储库,但一切都刚刚回到我开始dbcbf96b的地方,回到本地文件仍然包含更改,本地存储库是最新的,并且 GitLab 仍然显示修订版。该pull命令产生:

    Updating ded8221..dbcbf96
    
    Run Code Online (Sandbox Code Playgroud)

所以我的 rebase …

git rebase git-rebase

1
推荐指数
2
解决办法
4912
查看次数

标签 统计

git ×6

commit ×2

cherry-pick ×1

git-rebase ×1

github ×1

heroku ×1

rebase ×1

revert ×1

ruby-on-rails ×1