Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 删除提交而不恢复所做的更改_Git_Github - Fatal编程技术网

Git 删除提交而不恢复所做的更改

Git 删除提交而不恢复所做的更改,git,github,Git,Github,大家好,我是github的新手。我刚开始和几个朋友为一个小组项目开发一个私人存储库。我不得不做大量的提交来组织代码、添加文件夹、移动东西等等。然而,这导致了提交的混乱。我想将照片中括号内的所有提交合并为一个提交,这样就不会显得杂乱无章: 我在上一个线程中使用了git-rebase-I HEAD~20,这个文本文件会弹出,但是当我将我从pick绘制的括号中的所有内容更改为“squash时,我得到一个错误:错误:如果没有以前的提交,就不能“squash” 非常感谢您的帮助。这也是我第一次使用gith

大家好,我是github的新手。我刚开始和几个朋友为一个小组项目开发一个私人存储库。我不得不做大量的提交来组织代码、添加文件夹、移动东西等等。然而,这导致了提交的混乱。我想将照片中括号内的所有提交合并为一个提交,这样就不会显得杂乱无章:

我在上一个线程中使用了
git-rebase-I HEAD~20
,这个文本文件会弹出,但是当我将我从
pick
绘制的括号中的所有内容更改为“
squash
时,我得到一个错误:
错误:如果没有以前的提交,就不能“squash”


非常感谢您的帮助。这也是我第一次使用github,所以我对它了解不多

问题是,
git-rebase-i HEAD~20
向您展示了项目的错误线性历史记录。Git和Github有这样做的坏习惯,这是很多混乱的根源。实际上,Git是一个图形(在计算机科学的意义上)

下面是由git log--decoration--oneline--Github不幸使用的伪线性历史

1ff521a (HEAD -> master, origin/master, origin/HEAD) Revert "Boulder code + minor changes"
85cb9fa Merge remote-tracking branch 'origin/master'
47d93ec Boulder code + minor changes
e6bb627 Recommit actor and sw
c6a48cc Add files via upload
1f005ec Create readme.txt
33f251b Added missing files, reuploading project
0b520fd Boulder code + minor changes
4068bca Recommit actor and sw
9b2aa1c Add files via upload
f7ed4ad Create readme.txt
14a6d35 Add files via upload
244e6d9 Create readme.txt
ce33d87 Add files via upload
86ae9a2 Add files via upload
8bec858 Add files via upload
f001fb0 Create readme.txt
d8dbf27 Create readme.txt
9ef59fc Delete Debug
64bfb3e Create Debug
aab055b Created DiggerMan folder (organization)
deb834b Added Debug Items
f219ae5 Create readme.txt
9da61f0 Added missing files, reuploading project
d6459cb added missing dll files, no other major change
42b500d Merged and organized code from last commit.
0a87678 Merge remote-tracking branch 'origin/master'
81f93fb Created new base class for objects that can be picked up
67e6369 HUD now displayed and partially implemented
4da4bff DiggerMan can now dig!
下面是git log--graph--decoration--oneline中的现实。它显示了提交的真实关系

* 1ff521a (HEAD -> master, origin/master, origin/HEAD) Revert "Boulder code + minor changes"
*   85cb9fa Merge remote-tracking branch 'origin/master'
|\  
| * 0b520fd Boulder code + minor changes
| * 4068bca Recommit actor and sw
| * 9b2aa1c Add files via upload
| * f7ed4ad Create readme.txt
| * 14a6d35 Add files via upload
| * 244e6d9 Create readme.txt
| * ce33d87 Add files via upload
| * 86ae9a2 Add files via upload
| * 8bec858 Add files via upload
| * f001fb0 Create readme.txt
| * d8dbf27 Create readme.txt
| * 9ef59fc Delete Debug
| * 64bfb3e Create Debug
| * aab055b Created DiggerMan folder (organization)
| * deb834b Added Debug Items
| * f219ae5 Create readme.txt
| * 9da61f0 Added missing files, reuploading project
* | 47d93ec Boulder code + minor changes
* | e6bb627 Recommit actor and sw
* | c6a48cc Add files via upload
* | 1f005ec Create readme.txt
* | 33f251b Added missing files, reuploading project
|/  
* d6459cb added missing dll files, no other major change
* 42b500d Merged and organized code from last commit.
*   0a87678 Merge remote-tracking branch 'origin/master'
|\  
| * 67e6369 HUD now displayed and partially implemented
* | 81f93fb Created new base class for objects that can be picked up
|/  
* 4da4bff DiggerMan can now dig!
那些看起来像树枝的东西就是树枝。Git分支只是提交上的标签。当您
git branch-d
时,您只是在删除标签合并后保留实际分支。这被称为“拓扑顺序”,理解Git中发生的事情是必要的。拓扑顺序才是最重要的

git-rebase-i HEAD~20
向您展示了一个错误的线性历史记录,使您看起来可以将所有提交挤在一起。相反,您必须查看地形并分别挤压每个分支


如果这看起来过于复杂,那就是。有一个更简单的方法

最简单的方法是:不要担心提交太多。一般来说,有太多的小提交比有太少的大提交要好。版本控制(尤其是提交消息)的目的之一是了解进行更改的原因。较小的提交使更改更容易与原因关联。合并提交将所有原因合并在一起。有很多关于壁球合并的建议,不要这样做

提交的数量及其大小不是一个有意义的度量标准。相反,一个好的提交会使代码更容易理解并在将来进行审查。例如,仅修复前一个提交中的键入错误的提交没有意义,例如
Create Debug
后跟
Delete Debug
。使用
fixup
摆脱它,或者完全删除两个提交,或者立即使用
git commit--amend重写以前的提交。同样,您有四次“createreadme.txt”,这可能是一个错误。OTOH
创建的DiggerMan文件夹(组织)
可能是一个有意义的提交,保留它


最后,在合并分支之前清理分支。这就避免了现在的问题。在合并之前,
git rebase-i master
将只选择当前分支中的提交,并且不会有任何拓扑问题。这也是一个好习惯,当你在一个协作项目上工作,你的分支需要被审查时;在提交分支以供审阅之前,您需要清理分支。

要挤压的第一个提交是
4eb500d

Github没有显示它,但是提交消息(“合并并组织…”)告诉我们为什么不能压缩这个提交:它是一个合并提交

挤压意味着挤压提交引入的更改被合并到父提交中。但是合并提交不是常规提交;它有两个或多个父提交

尚不清楚
git-rebase
要挤压到哪个父级,您让它挤压提交。更重要的是,如果将其压缩为其父对象之一,则会删除合并操作。这些可能是Git不允许压缩合并提交的好理由


使用图形化Git客户端查看提交如何相互关联,并分别编辑每个分支。然后,您可以重新创建合并提交,并最终放弃您不想保留的当前提交。

您可以向编辑器显示对“挤压”所做的更改吗?比如,就在您保存并关闭它之前,这里是这样的:您在rebase中的一些提交ID与Github上的不一致。请看“重新提交参与者和软件”。还请注意,rebase的前面紧跟着两个“Create readme.txt”,而Github没有。线性查看提交历史会丢失大量信息。你能给我们看一个git log--graph--装饰一下吗
,这样我们就可以看到真实的顺序了?更好的是,你能链接到Github回购协议吗?@Schwern这是私有的,但我现在让它非私有:@Schwern好的。。。现在我让事情变得更糟。。。。请帮助,我想从我的提交变更日志/历史记录中删除所有带有红点的内容:谢谢,这非常有用!我会记住这一点,特别是不要担心有太多的提交。