在合并冲突的情况下使用 git 存储版本
use git stash version in case of merge conflict
我刚刚做了
git stash
git pull
git stash apply
收到消息
Auto-merging my_notebook.ipynb
CONFLICT (content): Merge conflict in my_notebook.ipynb
这是一个二进制文件,所以我不知道如何像通常处理源代码合并冲突那样手动解决冲突。
我怎样才能用我隐藏的文件替换我工作目录中的文件?覆盖拉取的版本?
这相对简单。存储本身由两个(或有时三个,但在本例中为两个)提交组成,您可以使用名称 stash
引用其中一个,另一个需要名称 stash^2
。 stash
下面的就是你运行git stash
时你的工作目录对应的那个,所以你要的就是那个
因此这些中的任何一个都可以在 Unix/Linux 系统上工作:
git restore --worktree --source=stash my_notebook.ipynb
git show stash:my_notebook.ipynb > my_notebook.ipynb
git checkout stash -- my_notebook.ipynb
通常使用第一个,因为它也适用于其他不太友好的系统,例如 Windows。请注意,它只写入您的 working tree 副本。第二个也只写入工作树副本(使用 I/O 重定向),但第三个写入两个 Git 的索引(又名“暂存区”) 和 你的工作树副本。您可能 想要 这样以后就不需要 运行 git add
文件;在这种情况下,您可以通过修改 git restore
命令以使用 git restore -SW --source stash
来获得此效果。1
(因为 git stash apply
运行 与“我们的”和“他们的”提交的内部合并,可以使用 --ours
或 --theirs
来提取 HEAD
和 working-tree 版本,但是,考虑到它们如何被各种操作交换,2 甚至我自己也无法跟踪哪个是哪个,因此我不推荐 git checkout --ours
或 git restore --theirs
或其他任何东西。直接命名 stash
这样你就知道你指的是哪个提交。)
1-S
或 --staged
选项表示 写入暂存 和 -W
或 --worktree
选项表示 写入工作树 。 --source
选项可以将 =stash
或 stash
作为一个单独的词。这里的想法是展示调用它的所有不同方法。
2例如,在git merge
期间,--ours
是有意义的,但在git rebase
期间,--ours
通常没有意义--theirs
表示“我的原始提交”,这似乎应该称为“我们的”。无论结果最终是什么,总是有技术原因,人们总是可以从第一原则中得出结论,但对于很少有人做的事情,麻烦似乎很愚蠢。直接命名 commit 更容易。
我刚刚做了
git stash
git pull
git stash apply
收到消息
Auto-merging my_notebook.ipynb
CONFLICT (content): Merge conflict in my_notebook.ipynb
这是一个二进制文件,所以我不知道如何像通常处理源代码合并冲突那样手动解决冲突。
我怎样才能用我隐藏的文件替换我工作目录中的文件?覆盖拉取的版本?
这相对简单。存储本身由两个(或有时三个,但在本例中为两个)提交组成,您可以使用名称 stash
引用其中一个,另一个需要名称 stash^2
。 stash
下面的就是你运行git stash
时你的工作目录对应的那个,所以你要的就是那个
因此这些中的任何一个都可以在 Unix/Linux 系统上工作:
git restore --worktree --source=stash my_notebook.ipynb
git show stash:my_notebook.ipynb > my_notebook.ipynb
git checkout stash -- my_notebook.ipynb
通常使用第一个,因为它也适用于其他不太友好的系统,例如 Windows。请注意,它只写入您的 working tree 副本。第二个也只写入工作树副本(使用 I/O 重定向),但第三个写入两个 Git 的索引(又名“暂存区”) 和 你的工作树副本。您可能 想要 这样以后就不需要 运行 git add
文件;在这种情况下,您可以通过修改 git restore
命令以使用 git restore -SW --source stash
来获得此效果。1
(因为 git stash apply
运行 与“我们的”和“他们的”提交的内部合并,可以使用 --ours
或 --theirs
来提取 HEAD
和 working-tree 版本,但是,考虑到它们如何被各种操作交换,2 甚至我自己也无法跟踪哪个是哪个,因此我不推荐 git checkout --ours
或 git restore --theirs
或其他任何东西。直接命名 stash
这样你就知道你指的是哪个提交。)
1-S
或 --staged
选项表示 写入暂存 和 -W
或 --worktree
选项表示 写入工作树 。 --source
选项可以将 =stash
或 stash
作为一个单独的词。这里的想法是展示调用它的所有不同方法。
2例如,在git merge
期间,--ours
是有意义的,但在git rebase
期间,--ours
通常没有意义--theirs
表示“我的原始提交”,这似乎应该称为“我们的”。无论结果最终是什么,总是有技术原因,人们总是可以从第一原则中得出结论,但对于很少有人做的事情,麻烦似乎很愚蠢。直接命名 commit 更容易。