一次性将本地git repo与远程同步,丢弃本地更改/提交

时间:2014-04-28 07:24:15

标签: git version-control

我不是一个专家,所以这可能看起来像一个愚蠢的问题。

我有本地和远程存储库,我想将本地与远程存储库同步。我有许多本地更改,存储更改,以及几个尚未推送到远程的提交。

一种方法是删除所有本地更改(使用git clean),还原来自远程的fetch/pull提交。但我认为必须有一个单一的命令可以一次完成所有这些。我尝试使用git reset --hard HEAD然后使用git pull,但这给了我:

# Your branch and 'origin/master' have diverged,
# and have 1 and 9 different commits each, respectively.

同时关注this question,但没有帮助。

3 个答案:

答案 0 :(得分:4)

如评论所述,git reset --hard origin/master会将您的master重置为上游。

但是:您当前的主人(使用其本地提交)将“丢失”(至少不再可见)。

所以一个步骤不是最好的方法。

我会推荐类似的东西:

git checkout master
git fetch origin
git branch tmp
git reset --hard origin/master
git checkout tmp
git rebase master
git checkout master
git merge tmp
git branch -d tmp

这样,您可以在更新的主文件

之上重新定义本地提交
x--x--x--x--x (master, origin/master)       x--x--x--x--x--y'--y' (tmp, master)
       \                                 =>
        y--y  (tmp)                           (after rebase+merge)

答案 1 :(得分:0)

如果您始终想在遥控器上创建新分支以镜像和跟踪本地分支(反之亦然),则永久性修复方法是:

git config --global push.default current

在执行git clone之后,我总是使用此命令配置本地git。尽管可以随时在本地远程分支“ Git致命:当前分支没有上游分支” 时应用此错误。

希望这会有所帮助。太和平了。 :)

答案 2 :(得分:-3)

git fetch -[options]

结帐:

git fetch --help

了解您可以使用的功能