Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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_Git Rebase_Git Commit - Fatal编程技术网

Git 为什么可以';我不能把承诺合二为一吗?

Git 为什么可以';我不能把承诺合二为一吗?,git,git-rebase,git-commit,Git,Git Rebase,Git Commit,嗯。我绞尽脑汁想弄明白为什么不能将两个提交合并为一个。Git非常复杂。我有一系列在本地和远程执行的提交: commit 6abb264c06b06d42ea7e07a469107b9d3d72dffa Author: XXXX <xxx@xxxx.xxx> Date: Thu Jan 23 15:59:03 2014 -0500 First Check-in again (forgot to add project file and forgot to tick off

嗯。我绞尽脑汁想弄明白为什么不能将两个提交合并为一个。Git非常复杂。我有一系列在本地和远程执行的提交:

commit 6abb264c06b06d42ea7e07a469107b9d3d72dffa
Author: XXXX <xxx@xxxx.xxx>
Date:   Thu Jan 23 15:59:03 2014 -0500

   First Check-in again (forgot to add project file and forgot to tick off append to last commit)


commit 90b2468f5267a471d52f2d7cc7cb1cd8604b3b86
Author: XXXX <xxx@xxxx.xxx>
Date:   Wed Jan 22 22:57:20 2014 -0500

   First check-in 
提交6ABB264C06D42EA7E07A469107B9D3D72DFFA
作者:XXXX
日期:2014年1月23日星期四15:59:03-0500
再次首次签入(忘记添加项目文件,忘记勾选“追加到上次提交”)
提交90b2468f5267a471d52f2d7cc7cb1cd8604b3b86
作者:XXXX
日期:星期三2014年1月22日22:57:20-0500
首次登记
我想把它们组合成这样:

commit 90b2468f5267a471d52f2d7cc7cb1cd8604b3b86
Author: XXXX <xxx@xxxx.xxx>
Date:   Wed Jan 22 22:57:20 2014 -0500

   First check-in 
提交90B2468F5267A471D52F2D7CC7CB1CD8604BB86
作者:XXXX
日期:星期三2014年1月22日22:57:20-0500
首次登记
我试图使用pick、squash和任何一个葫芦命名的命令来重新设置基址,但都没有用。它告诉我它已经挤压/合并/拾取了任何内容,但我总是看到两个提交而不是一个


我也不知道皮克和壁球有什么区别。此外,我也不知道提交和分支之间有什么区别。此外,我读到一个分支只是一个提交,但为什么我们必须合并分支而不是拾取/挤压(??)提交?这令人非常困惑

你被我对git的一系列小毛病绊倒了,所有这些都是同时发生的。这实际上是一个好迹象。:-)

首先,rebase在根提交的“重定基址”方面存在问题。在相当现代的版本中,您可以使用
git-rebase-i--root
,这将允许您将第二次提交压缩或修正为第一次(根)提交。您需要
--root
参数。(较旧版本的git缺少
--root
,这就大大增加了实现的难度。)

下一步:

皮克和壁球的区别是什么

在交互式重基中,
pick
表示“按原样提交”,而
squash
表示“将此提交添加到上一次提交之上”。
squash
fixup
之间没有根本区别,只是前者让您有机会编辑提交消息,而后者只是将“fixup”作为树更改(完全丢弃提交消息文本)

提交和分支之间的区别是什么

提交是存储库中的实际对象。“分支”是一个模棱两可的术语,有时意味着“分支标签”-它只是对提交的引用,或者等效地,是单个提交的名称,有时意味着由一系列提交及其父级组成的数据结构

有人说“当你理解X时,git更有意义”,因为X的许多不同的值。这概括为“一旦你理解git,git更有意义。”:-)这实际上不仅仅是同义反复的意义,但对你的理解没有多大帮助!幸运的是,(在我看来)这很有帮助。通读一遍,你会发现“分支”的含义模棱两可,但通常是显而易见的,这可能更有意义


编辑:示例会话:

$ cd /tmp/trepo
$ git init
Initialized empty Git repository in /tmp/trepo/.git/
$ echo data > somefile; git add somefile; git commit -m 'first check in'
[master (root-commit) 64a2d9f] first check in
 1 file changed, 1 insertion(+)
 create mode 100644 somefile
$ echo other > another-file; git add another-file
$ git commit -m 'combine with first check in'
[master d375b81] combine with first check in
 1 file changed, 1 insertion(+)
 create mode 100644 another-file
$ git rebase -i --root
[in editor, change second line from "pick" to "fixup"; write and quit]
".git/rebase-merge/git-rebase-todo" 20L, 667C written
[detached HEAD 5b2a979] first check in
 2 files changed, 2 insertions(+)
 create mode 100644 another-file
 create mode 100644 somefile
Successfully rebased and updated refs/heads/master.
$ git log --oneline
5b2a979 first check in
注意git的另一个小问题:
git log
以从新到旧的顺序显示提交,但
git-rebase-i
以从旧到新的顺序显示提交


并且:如果您已
push
ed,则远程提交的是旧提交,而不是新提交。因此,您将看到既有可通过
origin/master
访问的旧遥控器(假设遥控器名为
origin
,您使用的是常规设置),也有可通过
master
访问的(单个)新遥控器。您必须获得远程回购以获取新的
主文件
,例如,通过
git push-f
(及其所有后果…。

您同时被我对git的一系列小问题绊倒了。这实际上是一个好迹象。:-)

首先,rebase在根提交的“重定基址”方面存在问题。在相当现代的版本中,您可以使用
git-rebase-i--root
,这将允许您将第二次提交压缩或修正为第一次(根)提交。您需要
--root
参数。(较旧版本的git缺少
--root
,这就大大增加了实现的难度。)

下一步:

皮克和壁球的区别是什么

在交互式重基中,
pick
表示“按原样提交”,而
squash
表示“将此提交添加到上一次提交之上”。
squash
fixup
之间没有根本区别,只是前者让您有机会编辑提交消息,而后者只是将“fixup”作为树更改(完全丢弃提交消息文本)

提交和分支之间的区别是什么

提交是存储库中的实际对象。“分支”是一个模棱两可的术语,有时意味着“分支标签”-它只是对提交的引用,或者等效地,是单个提交的名称,有时意味着由一系列提交及其父级组成的数据结构

有人说“当你理解X时,git更有意义”,因为X的许多不同的值。这概括为“一旦你理解git,git更有意义。”:-)这实际上不仅仅是同义反复的意义,但对你的理解没有多大帮助!幸运的是,(在我看来)这很有帮助。通读一遍,你会发现“分支”的含义模棱两可,但通常是显而易见的,这可能更有意义


编辑:示例会话:

$ cd /tmp/trepo
$ git init
Initialized empty Git repository in /tmp/trepo/.git/
$ echo data > somefile; git add somefile; git commit -m 'first check in'
[master (root-commit) 64a2d9f] first check in
 1 file changed, 1 insertion(+)
 create mode 100644 somefile
$ echo other > another-file; git add another-file
$ git commit -m 'combine with first check in'
[master d375b81] combine with first check in
 1 file changed, 1 insertion(+)
 create mode 100644 another-file
$ git rebase -i --root
[in editor, change second line from "pick" to "fixup"; write and quit]
".git/rebase-merge/git-rebase-todo" 20L, 667C written
[detached HEAD 5b2a979] first check in
 2 files changed, 2 insertions(+)
 create mode 100644 another-file
 create mode 100644 somefile
Successfully rebased and updated refs/heads/master.
$ git log --oneline
5b2a979 first check in
注意git的另一个小问题:
git log
以从新到旧的顺序显示提交,但
git-rebase-i
以从旧到新的顺序显示提交

并且:如果您已
push
ed,则远程提交的是旧提交,而不是新提交。因此,您将看到这两个旧版本,它们可以通过
origin/master
访问(假设遥控器是na)