如何解决将本地Git存储库与远程存储库同步
| 我想将本地存储库与远程存储库进行同步,以便本地存储库成为远程存储库的100%副本-这意味着,如果这些存储库中的某些文件不同,我们将使用远程存储库覆盖本地文件,如果存在远程中不存在的本地存储库中的文件,将删除本地文件。 除了进行远程存储库的全新克隆之外,还有其他方法可以实现吗? 类似的问题与一键式同步本地git repo与远程同步丢弃本地更改/提交。解决方法
git fetch --prune
-p,-修剪
提取后,删除远程上不再存在的所有远程跟踪分支。修剪选项
, 这些步骤可以做到:
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存储库不仅是目录和文件的树,而且还存储这些树的历史记录-可能包含分支和合并。
从存储库中获取数据时,您会将所有或部分分支复制到存储库中。然后,这些作为“远程跟踪分支”存储在您的存储库中,例如诸如“ 8”之类的分支。
从远程存储库中获取新的提交不会更改本地工作副本的任何内容。
您的工作副本通常已签出提交,称为HEAD
。此提交通常是您本地分支机构之一的提示。
我认为您想将本地分支(或所有本地分支?)更新为相应的远程分支,然后签出最新分支。
为了避免与工作副本发生任何冲突(可能会有局部更改),请首先清除所有未版本化的内容(使用git clean
)。然后,签出与要更新到的远程分支相对应的本地分支,并使用git reset
将其切换到获取的远程分支。 (git pull
会将远程分支的所有更新合并到您的本地分支中,这可能会执行相同的操作;如果您有本地提交,则将创建合并提交。)
(但是那样的话,您实际上会丢失所有本地更改-在工作副本和本地提交中。请确保您确实想要这样做-否则最好使用新分支,这样可以保存本地提交。并使用git stash
保存尚未进行的更改。承诺。)
编辑:
如果您只有一个本地分支机构并且正在跟踪一个远程分支机构,那么您要做的就是
git pull
从工作目录内部。
这将获取所有跟踪的远程分支的当前版本,并将当前分支(和工作目录)更新为正在跟踪的远程分支的当前版本。
, 你想做
git fetch --prune origin
git reset --hard origin/master
git clean -f -d
这使您的本地存储库完全类似于远程存储库。
切记用要与之同步的远程和分支替换origin和master。
, 重置本地存储库并将其与远程分支同步
命令:
切记用要与之同步的远程和分支替换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
现在,您的本地分支是远程分支的精确副本(提交和全部)。
命令输出:
这是在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$
,(此信息来自The Git用户手册)
我也在学习,所以这可能不是对这个问题的确切答案,但可能对某些人有帮助:
最初克隆远程存储库时,所有分支的副本都存储在本地存储库中(用git branch -r
查看)
要更新这些副本并使其成为最新版本(即与远程分支同步),请使用git fetch
。这不会影响您现有的任何自定义创建的分支。
要覆盖本地分支的结帐,请使用git checkout origin/branch_name
来检查正在使用的任何分支的新版本(假设您已执行git add origin /path/to/repository
),这将覆盖对分支branch_name
的本地更改。
, 听起来您想要远程存储库的镜像:
git clone --mirror url://to/remote.git local.git
该命令将创建一个裸仓库。如果您不希望有裸露的存储库,事情将会变得更加复杂。
, 如果您正在谈论同步派生的仓库,则可以按照以下步骤操作。
如何从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上,则将上游/ master合并到master分支中
git merge upstream/master
而已!!
通过git remote
命令进行交叉检查,更具体地是git remote -v
如果我也对上游存储库具有提交权限,那么我可以创建一个本地上游分支,并进行将要在那里上游的工作。
, 您可以为此使用git hooks。只需创建一个钩子即可在更新后将更改推送到另一个存储库。
当然,您可能会遇到合并冲突,因此您必须弄清楚如何处理它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。