如何使用last dev branch commit在master分支上提交?

时间:2018-05-15 13:53:45

标签: git

有两个分支,我在dev分支上工作,我想让dev分支的最后一个提交成为master分支的第一个提交。

当前工作目录是否干净时,如何将当前工作目录提交到另一个分支。我不想使用git merge,因为它会将当前分支的先前git日志添加到另一个分支

2 个答案:

答案 0 :(得分:1)

我认为关于stash的问题中的所有内容都是漏洞。如果我理解你的问题:

  

当前工作目录是否干净时,如何将当前工作目录提交到另一个分支。我不想使用git merge,因为它会将当前分支的前一个git log添加到另一个分支

您希望在一个分支中获取文件的当前状态,并在不使用合并的情况下将它们应用于另一个分支。

如果这就是你想做的全部,那么你实际上可以使用git checkout(很奇怪,是吗?)

检查要应用更改的分支(我们称之为target_branch

> git checkout target_branch

然后使用此命令:

> git checkout source_branch -- <glob pattern>

如果您想要提取所有内容,<glob pattern>类似于path/to/file或仅.。 (请注意,您当前所在的目录非常重要。)

您实际上只是将指定的文件从该分支拉到source_branch,而不是查看target_branch。请注意,这些文件的历史记录不会应用于实际内容,就像您手动复制/粘贴它们一样。

答案 1 :(得分:1)

你对“藏匿”的理解实际上都是正确的。

从用户的角度来看,git stash只是存储您当前的更改,然后让您自己浏览历史记录,执行某些命令等等,然后让您轻松回到原来的位置并继续工作

此外,由于您可能会执行一些额外的更改(特别是当您忘记实际存放某些内容时),git stash就像堆栈一样,将您当前的更改存储在之前的更改之上,这使您能够先后回到上一个州,直到你回到最初状态。 git stash list会告诉您自己的位置。

技术的角度来看,现在,git根本不需要额外的东西来完成这项任务。它已经提供了它所需要的一切。事实上,当你藏匿某些东西时,git将完全按照你真正添加/提交文件的方式构建一个commit对象。此提交对象允许您当前正在处理的修订作为父项,并在.git/refs/stash中存储的文件中引用,就像常规分支一样。

通过这种方式,存储堆栈的管理方式就像普通的分支一样,它可以从您正在工作的点分叉,并且可以根据需要以这种方式处理。唯一改变的是用户界面的级别。弹出堆栈的顶部只是检查最后一个版本,然后重置为上一个版本,除了这是自动完成。

此外,由于一旦这个地方干净,你就可以在你的存储库的历史中移动到任何地方(包括从一个分支跳到另一个分支的可能性),stash commit objets实际上包含两个父母:第一个是前一个的引用,第二个是您拨打git stash时所处的修订。

这种做法是当实际合并两个分支时实际完成的操作。当在gitk这样的图形界面中显示时,这会将整个藏匿堆栈显示为一个垂直的谱系,其中的分支指向您隐藏某些内容时的每个修订版。

一旦我们知道它就完全有道理,但事实上它确实有点令人费解。

  

更新 stash被认为是提交,它存储工作目录的状态,是否意味着通过将工作目录的脏状态与工作目录的先前清理状态进行比较来重新应用更改?

答案是肯定的。如果git在你想要弹出被隐藏的更改时检测到另一个更改,操作将中止,git将警告你这将破坏你的最后更改。

如果这是您想要的,您可以强制它(使用-f),或者您可以将其存放在现有的顶部。如果您在最后一个之前需要恢复之前的更改,则可以使用git stash apply重新应用您的藏匿系列的任何阶段,而无需将其从叠加。