如何在git pull中只隐藏冲突的文件?

kiz8lqtg  于 2023-03-16  发布在  Git
关注(0)|答案(2)|浏览(174)

我正在寻找一个命令git stash只列出文件将被覆盖/冲突时,做一个git pull,所有的一次。我只是想接受所有的远程更改和处理所有的冲突,通过隐藏本地。
我只是丢弃了冲突的本地更改或隐藏了所有更改(我想保留那些不冲突的更改),这并不理想。

fykwrbwg

fykwrbwg1#

Stop using git stash,而使用temporary commits
这样做没有什么特别的处理,只是简单的,普通的git命令:

git commit -am "==== before pull ===="    # Temporary commit
git pull --rebase
git reset HEAD^                           # Undo temporary commit

如果发生冲突,则使用use KDiff3解决冲突。
上面的方法很简单,或者如果你想要更多的控制(比如pull带来了很多变化,你只想在开始时处理其中的一部分),你可以使用两个分支,somebranch(跟踪origin/somebranch)和somebranch.mywork,这是你正在做的未发布的工作。
然后让somebranch严格遵循origin/somebranch,然后在此基础上对somebranch.mywork进行重新定基。当最终要推送来自somebranch.mywork的更改时,只需(快进)将这些更改合并到somebranch中并进行推送。

jv2fixgn

jv2fixgn2#

编辑:不幸的是,我刚刚意识到生成的隐藏文件将同时包含冲突文件和非冲突文件。

这两个命令应该会得到您想要的结果:

git pull --autostash
git diff --name-only --diff-filter=U | xargs git restore -s@ -SW

autostash选项将执行常规的git stash,然后执行git pull。然后,它将尝试应用隐藏。如果存在任何冲突,它将提示您解决它们。
这里的技巧是,您可以完全放弃更改,而不是解决冲突。
我给出的git diff命令将首先找到所有存在合并冲突的文件,然后将它们通过管道传输到git restore
您的本地存储库将处于以下状态:

  • 分支头是最新的远程
  • 所有不冲突的更改仍在您的工作目录中
  • 任何可能引起冲突的文件都在你最近的藏匿处
  • 最新的stash包含拉取之前的所有更改。

相关问题