我希望将本地存储库与远程存储库同步,以便我的本地存储库成为远程存储库的100%副本 - 这意味着如果这些存储库中的某些文件不同,我们会使用远程存储库覆盖本地存储库,并且如果本地存储库中存在远程不存在的文件,则会删除本地文件。
除了通过对远程存储库进行全新克隆之外,还有什么方法可以实现这一目标吗?
与Sync local git repo with remote in one shot discarding local changes/commits类似的问题。
答案 0 :(得分:265)
git fetch --prune
-p, - prune
获取后,删除远程不再存在的任何远程跟踪分支。 prune options
答案 1 :(得分:115)
这些步骤可以做到:
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知识在一段时间内略有改善,我提出了另一种更简单的方法来做同样的事情。这是如何(#with解释)。在你的工作分支中:
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.
虽然此后您的本地提交和更改将从视线中消失,但如有必要,可以恢复已提交的更改。
答案 2 :(得分:88)
您需要了解Git存储库不仅仅是一个目录和文件树,还存储了这些树的历史记录 - 可能包含分支和合并。
从存储库中获取时,您将全部或部分分支复制到存储库。然后将它们作为“远程跟踪分支”存储在您的存储库中,例如名为remotes/origin/master
或类似名称的分支。
从远程存储库中获取新提交不会改变有关本地工作副本的任何内容。
您的工作副本通常会签出提交,名为HEAD
。此提交通常是您当地某个分支机构的提示。
我想你想将你的本地分支(或者所有本地分支?)更新到相应的远程分支,然后查看最新的分支。
为避免与工作副本(可能有本地更改)发生冲突,首先要清除未版本化的所有内容(使用git clean
)。然后检查与要更新的远程分支对应的本地分支,并使用git reset
将其切换到获取的远程分支。 (git pull
将在本地更新远程分支的所有更新(可能会执行相同操作),或者如果您有本地提交,则创建合并提交。)
(但是你会真正失去任何本地更改 - 无论是在工作副本还是本地提交中。确保你真的想要这个 - 否则最好使用新的分支,这会保存你的本地提交。并使用git stash
保存尚未提交的更改。)
修改强> 如果您只有一个本地分支并且正在跟踪一个远程分支,那么您需要做的就是
git pull
来自工作目录。
这将获取所有被跟踪远程分支的当前版本,并将当前分支(和工作目录)更新为它正在跟踪的远程分支的当前版本。
答案 3 :(得分:62)
你想做
git fetch origin
git reset --hard origin/master
git clean -f -d
这使您的本地仓库与远程仓库完全一样。
请记住使用要与其同步的远程和分支替换origin和master。
答案 4 :(得分:4)
(此信息来自The Git User's Manual)
我也在学习,所以这可能不是问题的答案,但它可能对某些人有所帮助:
git branch -r
查看)git fetch
。这不会影响您现有的任何自定义分支。git add origin /path/to/repository
)使用git checkout origin/branch_name
,这将覆盖您在分支{{1}上的本地更改}} 答案 5 :(得分:3)
听起来你想要一个远程存储库的镜像:
git clone --mirror url://to/remote.git local.git
该命令创建一个裸存储库。如果你不想要一个裸存储库,事情会变得更复杂。
答案 6 :(得分:3)
如果您正在谈论同步分叉回购,那么您可以按照以下步骤操作。
如何从git
同步fork存储库检查您当前的git分支
git branch
如果您不在主人身上,则结帐到主人
git checkout master
如果您具有正确的访问权限,则获取上游存储库
git fetch upstream
如果您收到以下错误,请运行
git remote add upstream git@github.com:upstream_clone_repo_url/xyz.git
fatal: 'upstream/master' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
现在运行以下命令。
git fetch upstream
现在,如果你在master上,那么将upstream / master合并到master分支
git merge upstream/master
就是这样!!
通过git remote
命令进行交叉检查,更具体的git remote -v
如果我也拥有上游仓库的提交权限,我可以创建一个本地上游分支,并在那里上游工作。
答案 7 :(得分:2)
重置本地存储库并将其与远程分支同步
命令: 记住要用要与之同步的远程和分支替换origin和master。
git fetch origin && git reset --hard origin/master && git clean -f -d
或分步进行:
git fetch origin
git reset --hard origin/master
git clean -f -d
您的本地分支现在是远程分支的精确副本(包括所有内容)。
命令输出:
这里是在JBoss 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$
答案 8 :(得分:0)
如果要在遥控器上创建新分支以镜像和跟踪您的本地分支(反之亦然)的永久性解决方法是:
git config --global push.default current
在执行git clone之后,我总是使用此命令配置本地git。尽管可以在本地远程分支“ Git致命:当前分支没有上游分支”错误时随时应用它。
希望这会有所帮助。太和平了。 :)
答案 9 :(得分:-2)
您可以使用git hooks。只需创建一个钩子,在更新后将其更改为另一个仓库。
当然,您可能会遇到合并冲突,因此您必须考虑如何处理它们。