是否有Git命令(或一系列短命令)可以安全可靠地执行以下操作?
目前我坚持:
git fetch -p
git stash
git stash drop
git checkout $branch
git pull
但是这让我感到困扰,因为我要求密码两次(fetch
和pull
)。 通常我会对任何解决方案感到满意,只要密码只需要一次。
几点说明:
答案 0 :(得分:63)
您可以按照与“How do I force “git pull” to overwrite local files?”:
类似的解决方案git fetch --all
git reset --hard origin/abranch
git checkout $branch
这只涉及一次获取。
答案 1 :(得分:24)
几点:
git stash
+ git stash drop
可以替换为git reset --hard
...或者更短的时间,将-f
添加到checkout
命令:
git checkout -f -b $branch
这会丢弃任何本地更改,就像在结帐前使用git reset --hard
一样。
至于主要问题:
您可以将相应的分支从遥控器合并到您的本地分支:git merge $branch origin/$branch
,而不是拉入最后一步,我相信它不会触及遥控器。如果是这种情况,则无需使用密码,因此可以解决您最关心的问题。
答案 2 :(得分:7)
git reset
和git clean
在某些情况下可能会过度(并且浪费时间)。
如果您只是有一条消息,例如“以下未跟踪的文件将被覆盖......”并且您希望远程/ origin / upstream覆盖那些冲突的未跟踪文件,则git checkout -f <branch>
是最佳选择。< / p>
如果你像我一样,你的另一个选择是清理并执行--hard reset
然后重新编译你的项目。
答案 3 :(得分:2)
新的git-switch
command(从GIT 2.23开始)还具有一个标志--discard-changes
,该标志对您有帮助。之后可能需要git pull
。
警告:它仍然被认为是实验性的。