如何在不触发auto的情况下弹出git存储

这个问题的简短版本是这样的:如何在不触发自动合并的情况下弹出git存储?


现在为更长的版本...

考虑以下玩具的例子,以替代git stash ... + git pull ... + git pop

首先, git status显示工作目录中的唯一修改是针对某个被跟踪的文件foo

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   foo
#
no changes added to commit (use "git add" and/or "git commit -a")

现在,为了将工作目录重置为干净状态,作为运行git pull的先决条件,我暂时将修改后的文件foo (某些未跟踪的名称)重命名,并在HEAD恢复foo的版本...

% mv foo foo.$(date +%Y%m%dT%H%M%S)
% git checkout foo
% git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   foo.20130508T110014
nothing added to commit but untracked files present (use "git add" to track)

好的,现在我运行git pull ,为了这个例子,我们可以假定是快进:

% git pull

最后,我还原了暂时重命名的foo

% mv foo.20130508T110014 foo

...我回来了

% git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   foo
#

这是git stash save + git pull + git stash pop的“道德等价物”,除了前者(而不是后者)不受“合并冲突”的影响,就像这样:

% git stash save 'WIP'
% git pull
% git stash pop
Auto-merging foo
CONFLICT (content): Merge conflict in foo

我怎样才能复制上面使用git stash save + ... + git stash poprename-checkout-pull-rename序列,而不触发自动合并?

编辑:顺便说一句, rename-checkout-...-rename例程更密切地代表了我所期望从一个称为stash的命令。 IOW:现在保存我的工作目录的状态,并稍后替换它。 这张照片没有“合并”。


我迟到了,认识到git已经为激发这个问题的问题提供了一个非常简单的解决方案(即自动合并可能会使存储库处于“未合并状态”)。

所有人需要做的就是使用

git stash branch <branchname> [<stash>]

而不是git stash pop (或git stash apply )。

这将以确保没有冲突的方式弹出存储。 易peasy柠檬,squeezy。


stash合并,这就是它的工作原理。

您可以使用write-tree read-treecheckout-index来实现非merge-y存储。 这是一个可行的示例,可以实现原始测试环境。

如果只是蛮横无效的隐藏应用,你可以例如

git read-tree stash^{tree}
git checkout-index -af

您看到合并冲突的事实意味着您从服务器拉出的foo文件发生了变化。 因此,将文件复制并移回将彻底清除foo文件中的所有更改。 如果你犯了这个错误,那么对foo做出改变的另一个人会恨你。

你的问题的答案取决于你想要完成的。 您是否试图查看服务器上的更改与您的代码进行了比较? 在完成之前,你是否试图避免处理其他人的代码?

如果你只是想看看分支的变化,你可以使用git fetch而不是git pull比较你的当前代码。 或者,如果您现在不想合并您的更改,请考虑在单独的分支中工作,或者直到您准备好合并为止。

链接地址: http://www.djcxy.com/p/24511.html

上一篇: how to pop git stash without triggering an auto

下一篇: Git: how to use stash