我想将本地存储库与远程存储库同步,以便本地存储库成为远程存储库的100%副本——这意味着如果这些存储库中的某些文件不同,我们将用远程存储库覆盖本地存储库,如果本地存储库中的文件在远程存储库中不存在,则本地文件将被删除。
除了重新克隆远程存储库之外,还有什么方法可以实现这一点吗?
类似的问题是一次性将本地git回购与远程同步,丢弃本地更改/提交。
我想将本地存储库与远程存储库同步,以便本地存储库成为远程存储库的100%副本——这意味着如果这些存储库中的某些文件不同,我们将用远程存储库覆盖本地存储库,如果本地存储库中的文件在远程存储库中不存在,则本地文件将被删除。
除了重新克隆远程存储库之外,还有什么方法可以实现这一点吗?
类似的问题是一次性将本地git回购与远程同步,丢弃本地更改/提交。
当前回答
以下步骤可以做到:
git reset --hard HEAD
git clean -f -x -d -n
然后没有-n
这将处理所有本地更改。现在提交。
git status
注意下面这句话:
Your branch is ahead of 'xxxx' by N commits.
记下数字“N” 现在:
git reset --hard HEAD~N
git pull
最后:
git status
应该没有显示要添加/提交的内容。 所有的清洁。
然而,一个新的克隆也可以做到这一点(但速度要慢得多)。
= = = = = =更新
随着时间的推移,我的git知识略有提高,我想出了另一种更简单的方法来做同样的事情。下面是如何做的(并加以解释)。在你的工作部门:
git fetch # This updates 'remote' portion of local repo.
git reset --hard origin/<your-working-branch>
# this will sync your local copy with remote content, discarding any committed
# or uncommitted changes.
虽然您的本地提交和更改将在此之后从视野中消失,但如果需要,可以恢复已提交的更改。
其他回答
你可以使用git钩子。只需创建一个钩子,在更新后将更改推到另一个回购。
当然,您可能会遇到合并冲突,因此您必须弄清楚如何处理它们。
你想做的是
git fetch --prune origin
git reset --hard origin/master
git clean -f -d
这使得您的本地回购完全像您的远程回购。
请记住用您想要同步的远程和分支来替换原点和主节点。
以下步骤可以做到:
git reset --hard HEAD
git clean -f -x -d -n
然后没有-n
这将处理所有本地更改。现在提交。
git status
注意下面这句话:
Your branch is ahead of 'xxxx' by N commits.
记下数字“N” 现在:
git reset --hard HEAD~N
git pull
最后:
git status
应该没有显示要添加/提交的内容。 所有的清洁。
然而,一个新的克隆也可以做到这一点(但速度要慢得多)。
= = = = = =更新
随着时间的推移,我的git知识略有提高,我想出了另一种更简单的方法来做同样的事情。下面是如何做的(并加以解释)。在你的工作部门:
git fetch # This updates 'remote' portion of local repo.
git reset --hard origin/<your-working-branch>
# this will sync your local copy with remote content, discarding any committed
# or uncommitted changes.
虽然您的本地提交和更改将在此之后从视野中消失,但如果需要,可以恢复已提交的更改。
重置本地存储库并将其与远程分支同步
命令: 请记住用您想要同步的远程和分支来替换原点和主节点。
git fetch origin && git reset --hard origin/master && git clean -f -d
还是一步一步:
git fetch origin
git reset --hard origin/master
git clean -f -d
您的本地分支现在是远程分支的精确副本(提交和全部)。
命令输出:
下面是在Forge git存储库的本地克隆上运行该命令的示例。
sharkbook:forge lbaxter$ git fetch origin && git reset --hard origin/master && git clean -f -d
HEAD is now at 356cd85 FORGE-680
Removing forge-example-plugin/
Removing plugin-container-api/
Removing plugin-container/
Removing shell/.forge_settings
sharkbook:forge lbaxter$
听起来好像你想要一个远程存储库的镜像:
git clone --mirror url://to/remote.git local.git
该命令创建一个裸存储库。如果您不想要一个裸露的存储库,事情就会变得更加复杂。