我正在学习git,我对一些命令问题感到困惑:
发布于 2013-05-16 06:31:24
将未提交的更改保存起来,以便您可以在一段时间内处理其他内容。在过去,您通常提交更改、切换分支、返回,然后使用"git重置头^“来反转提交。
至于改版,以下是我的笔记:
类似于合并,但保持一个连续的线程。
简而言之,rebase获取当前分支并搜索它的历史记录,以查找它从指定分支分叉的点。然后,它将所有这些提交作为补丁并将它们应用到指定的分支,从而有效地将这些提交移植到指定分支的末尾。
在此之前:
E--F--G mybranch
/
A--B--C--D upstream在“上游重新基地”之后:
E'-F'-G' mybranch
/
A--B--C--D upstream如果两个分支中都有提交(例如,因为您向某人发送了修补程序并将其应用),则它们不会被冗余地应用。见手册页。
注:这可能会搞乱任何已经有你的分支的副本的人。这个命令最好只在尚未被推送到另一个存储库的提交时使用。
上游可能是一个分支或任何其他有效的提交。
如果遇到冲突,则git将冲突标记(<<<<<)添加到受影响的文件中,并停止重基。解决冲突后,使用"git“。在处理所有冲突时,使用"git重基-继续“。您还可以使用"git rebase -abort“取消重基。
如果您在当前分支中有未实现的更改,则必须先将它们保存起来,然后再进行重基操作。
还允许您使用"-i“选项重写当前分支的历史记录(请参阅”重新排列提交“):
在此之前:
A--B--C--D--E之后:
A--B--E'-C'-D'甚至联合(壁球):
A--B--CE'-D'或从链中完全删除提交:
A--B--D'-E'onto:
--onto branch选项允许您将更改完全移植到不同的分支。例如,假设您的分支是从分支‘foo’中分叉的:
o--o--o--o--o master
\
o--o--o--o--o foo
\
o--o--o mybranch但现在你想从师父那里分叉:
o--o--o--o--o master
\ \
\ o--o--o mybranch
\
o--o--o--o--o foo您可以查看我的分支并发出以下命令:
git rebase --onto master foo在英语中,这句话写着“从foo (但不包括)开始的所有更改,并将它们应用于master。”
请看手册页。-i也可以用于此。
注意:重基被认为是有害的:此命令通过有效重写历史来工作。可以将自己置于一种状态中,在这种状态下,不可能从过去的某个点重构存储库的状态。例如,在上面给出的第一个示例中,存储库状态E、F和G现在永远丢失。
好消息是,如果在进行重基之前为事物分配分支名称或标记,那么就不会真正丢失任何东西。如果我在重基之前执行了git branch foo,则分支"foo“将指向存储库的原始状态G,使其在以后可以恢复(直到删除分支foo)。
E-F-G foo
/
/ E'-F'-G' mybranch
/ /
A--B--C--D upstream发布于 2013-05-16 06:21:12
git stash存储未提交的更改。例如,您开始在分支A上处理一个特性,然后意识到您应该在处理分支B,您可以这样做
git stash
git checkout B
git stash pop在这本书中有一个关于它的章节。
重新定位/合并基本上是一个意见问题。我通常更喜欢重新定位。作为一条经验法则,你永远不应该重新建立任何已经公开的基础,因为重基重写了历史。
发布于 2013-05-16 06:45:48
在英语中,“藏”的意思是“存放在哪里”或“存放或安全保管以备将来使用”。这正是git stash所做的。如果您正在处理某件事情,但不想提交它,因为它还没有完全完成,而是需要处理其他紧急事项,那就是您使用git stash的时候。把你最近的变化集中到你需要做的新的紧迫的事情上。有关存储意味着什么的详细说明,请参阅本章(6.3Git工具-存储)在ProGit书中。
简单地说,重新定位指的是纠正你的工作历史的行为。要完全理解它意味着什么,您需要了解分支是什么以及合并意味着什么。所以我建议你读ProGit书中关于分支的章节。
https://stackoverflow.com/questions/16580280
复制相似问题