我想将本地存储库与远程存储库进行同步,以便本地存储库成为远程存储库的100%副本-这意味着,如果这些存储库中的某些文件不同,我们将使用远程存储库覆盖本地文件,如果存在远程中不存在的本地存储库中的文件,将删除本地文件。
除了进行远程存储库的全新克隆之外,还有其他方法可以实现吗?
类似的问题与一键式同步远程本地git repo丢弃本地更改/提交。
git fetch --prune
我想将本地存储库与远程存储库进行同步,以便本地存储库成为远程存储库的100%副本-这意味着,如果这些存储库中的某些文件不同,我们将使用远程存储库覆盖本地文件,如果存在远程中不存在的本地存储库中的文件,将删除本地文件。
除了进行远程存储库的全新克隆之外,还有其他方法可以实现吗?
类似的问题与一键式同步远程本地git repo丢弃本地更改/提交。
git fetch --prune
Answers:
git fetch --prune
-p, --prune
提取后,删除远程上不再存在的所有远程跟踪分支。修剪选项
git pull -p是否相同-'git pull使用给定的参数运行git fetch并调用git merge将检索到的分支头合并到当前分支中'' -git-scm.com/docs/git-pull
git fetch <remote> --prune,万一有人只需要--prune特定的远程。例如。git fetch upstream --prune。
git fetch origin --prune将您的本地存储库与upstream项目的分支同步
这些步骤可以做到:
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存储库不仅是目录和文件的树,而且还存储这些树的历史记录-可能包含分支和合并。
从存储库中获取数据时,您会将其中的全部或部分分支复制到您的存储库中。然后,这些作为“远程跟踪分支”在您的存储库中,例如,名为like之类的分支remotes/origin/master。
从远程存储库中获取新的提交不会更改本地工作副本的任何内容。
您的工作副本通常已签出一次提交,称为HEAD。此提交通常是您本地分支机构之一的提示。
我认为您想将本地分支(或所有本地分支?)更新为相应的远程分支,然后签出最新的分支。
为了避免与您的工作副本发生任何冲突(可能会有局部更改),您首先要清理所有未版本化的内容(使用git clean)。然后,签出与您要更新到的远程分支相对应的本地分支,并用于git reset将其切换到获取的远程分支。(git pull将远程分支的所有更新合并到您的本地分支中,此更新可能会执行相同的操作;如果您具有本地提交,则将创建合并提交。)
(但是那样的话,您实际上将丢失所有本地更改-在工作副本和本地提交中。请确保您确实想要这样做-否则最好使用新分支,这样可以保存本地提交。并用于git stash保存尚未提交的更改)
编辑: 如果您只有一个本地分支机构并且正在跟踪一个远程分支机构,那么您要做的就是
git pull
从工作目录内部。
这将获取所有跟踪的远程分支的当前版本,并将当前分支(和工作目录)更新为正在跟踪的远程分支的当前版本。
git pull我认为,在您的简单情况下a 应该就足够了。(我更新了答案。)
你想做
git fetch --prune origin
git reset --hard origin/master
git clean -f -d
这使您的本地存储库完全类似于远程存储库。
切记用要与之同步的远程和分支替换origin和master。
node_modules,它完全可以按照我的要求工作。
重置本地存储库并将其与远程分支同步
命令:请记住用要与之同步的远程和分支替换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 add origin /path/to/repository)git checkout origin/branch_name,这将覆盖您对本地分支的更改branch_name如果您正在谈论同步派生的仓库,那么您可以按照以下步骤操作。
如何从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
如果我也对上游存储库具有提交权限,那么我可以创建一个本地上游分支,并进行将要在那里上游的工作。