Git 如何使用上次开发分支提交在主分支上提交?

Git 如何使用上次开发分支提交在主分支上提交?,git,Git,有两个分支,我处理dev分支,我想让dev分支的最后一个commmit成为master分支的第一个commit 当当前工作目录是干净的时,如何将当前工作目录提交到另一个分支。我不想使用git merge,因为它会将当前分支以前的git日志添加到另一个分支我认为你问题中关于隐藏的所有内容都是无用的。如果我正确理解你的问题: 当当前工作目录是干净的时,如何将当前工作目录提交到另一个分支。我不想使用git merge,因为它会将当前分支的上一个git日志添加到另一个分支 您希望获取一个分支中文件的当前

有两个分支,我处理dev分支,我想让dev分支的最后一个commmit成为master分支的第一个commit


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

我认为你问题中关于
隐藏
的所有内容都是无用的。如果我正确理解你的问题:

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

您希望获取一个分支中文件的当前状态,并将其应用于另一个分支,而不使用“合并”

如果这就是你想要做的,那么你实际上可以使用(奇怪吧?)

签出要将更改应用到的分支(我们将其称为
target\u分支

然后使用以下命令:

> git checkout source_branch -- <glob pattern>
>git签出源\u分支--
其中
类似于
path/to/file
,或者如果要提取所有内容,则只需
。(请注意,您当前所在的目录非常重要。)


与其签出
源分支
,实际上您只需将指定文件从该分支拉入
目标分支
。请注意,这些文件的历史记录将不被应用。。。只有实际的内容,就好像你已经手动复制/粘贴了一样。

我认为你问题中关于
隐藏的所有东西都是假的。如果我正确理解你的问题:

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

您希望获取一个分支中文件的当前状态,并将其应用于另一个分支,而不使用“合并”

如果这就是你想要做的,那么你实际上可以使用(奇怪吧?)

签出要将更改应用到的分支(我们将其称为
target\u分支

然后使用以下命令:

> git checkout source_branch -- <glob pattern>
>git签出源\u分支--
其中
类似于
path/to/file
,或者如果要提取所有内容,则只需
。(请注意,您当前所在的目录非常重要。)


与其签出
源分支
,实际上您只需将指定文件从该分支拉入
目标分支
。请注意,这些文件的历史记录将不被应用。。。只有实际的内容,就像你手动复制/粘贴一样。

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

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

另外,由于您可能会执行一些额外的更改(特别是当您忘记您实际上正在隐藏某些内容时),
git stash
的作用类似于一个堆栈,将您当前的更改隐藏在以前的更改之上,这使您能够连续返回到以前的状态,直到返回到初始状态
git藏匿清单
会让你知道你在哪里

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

通过这种方式,存储堆栈就像普通分支一样进行管理,它可以从您正在工作的点开始分叉,如果需要的话,可以通过这种方式进行处理。唯一的变化是在用户界面级别。弹出堆栈顶部只是签出最后一个版本,然后重置为上一个版本,只是这是自动完成的

此外,因为一旦地方清理干净,您就可以在存储库历史中的任何地方移动(包括从一个分支跳到另一个分支的可能性),所以stash commit对象实际上包含两个父对象:第一个是前一个的引用,第二个是调用
git stash
时所使用的修订版

这种方法就是当一个分支实际合并两个分支时实际要做的事情。当显示在图形界面(如
gitk
)中时,整个隐藏堆栈将显示为一个垂直谱系,其分支指向隐藏内容时的每个修订

一旦我们知道了这一点,这完全是有道理的,但在这之前确实有点令人费解

updatestash被认为是commit,它存储工作目录的状态,这是否意味着通过比较工作目录的脏状态和工作目录以前的干净状态来重新应用更改

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

如果这是您想要的,您可以强制它(使用
-f
),或者您可以将它隐藏在现有的文件上。如果您在上一次更改之前需要恢复以前的更改,您可以使用
git stash apply
重新应用您的stash沿袭的任何阶段,而无需将其从堆栈中移除。