如何在不触发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 pop
的rename-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-tree
和checkout-index
来实现非merge-y存储。 这是一个可行的示例,可以实现原始测试环境。
如果只是蛮横无效的隐藏应用,你可以例如
git read-tree stash^{tree}
git checkout-index -af
您看到合并冲突的事实意味着您从服务器拉出的foo
文件发生了变化。 因此,将文件复制并移回将彻底清除foo
文件中的所有更改。 如果你犯了这个错误,那么对foo
做出改变的另一个人会恨你。
你的问题的答案取决于你想要完成的。 您是否试图查看服务器上的更改与您的代码进行了比较? 在完成之前,你是否试图避免处理其他人的代码?
如果你只是想看看分支的变化,你可以使用git fetch
而不是git pull
比较你的当前代码。 或者,如果您现在不想合并您的更改,请考虑在单独的分支中工作,或者直到您准备好合并为止。