我想将本地存储库与远程存储库同步,以便我的本地存储库成为远程存储库的100%副本 - 这意味着如果这些存储库中的某些文件不同,我们会使用远程存储库覆盖本地存储库,如果存在远程中不存在的本地存储库中的文件,本地文件将被删除.
有没有办法实现除了远程存储库的新克隆之外的其他方法?
类似的问题如同本地git repo与远程同步丢弃本地更改/提交.
job*_*wat 295
git fetch --prune
Run Code Online (Sandbox Code Playgroud)
-p, - prune
获取后,删除远程不再存在的任何远程跟踪分支.修剪选项
Fra*_*ace 127
这些步骤将执行此操作:
git reset --hard HEAD
git clean -f -x -d -n
Run Code Online (Sandbox Code Playgroud)
然后没有 -n
这将处理所有本地更改.现在提交......
git status
Run Code Online (Sandbox Code Playgroud)
并注意如下行:
Your branch is ahead of 'xxxx' by N commits.
Run Code Online (Sandbox Code Playgroud)
现在记下数字'N':
git reset --hard HEAD~N
git pull
Run Code Online (Sandbox Code Playgroud)
最后:
git status
Run Code Online (Sandbox Code Playgroud)
应该没有显示任何添加/提交.一切都干净.
然而,一个新的克隆可以做同样的事情(但很慢).
===更新===
由于我的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.
Run Code Online (Sandbox Code Playgroud)
虽然此后您的本地提交和更改将从视线中消失,但如有必要,可以恢复已提交的更改.
Paŭ*_*ann 89
您需要了解Git存储库不仅仅是目录和文件树,还存储了这些树的历史记录 - 可能包含分支和合并.
从存储库中获取时,您将全部或部分分支复制到存储库.然后,它们作为"远程跟踪分支"存储在您的存储库中,例如名称为remotes/origin/master
或类似的分支.
从远程存储库获取新提交不会改变有关本地工作副本的任何信息.
您的工作副本通常会签出一个提交,称为HEAD
.此提交通常是您的一个本地分支的提示.
我想你想将你的本地分支(或者所有本地分支?)更新到相应的远程分支,然后检查最新的分支.
为避免与工作副本(可能有本地更改)发生冲突,首先要清除未版本化的所有内容(使用git clean
).然后检查与要更新的远程分支对应的本地分支,并使用git reset
它将其切换到获取的远程分支.(git pull
将在本地更新远程分支的所有更新,这可能会执行相同操作,或者如果您有本地提交,则创建合并提交.)
(但是你真的会丢失任何本地更改 - 无论是在工作副本还是本地提交中.确保你真的想要这个 - 否则最好使用新的分支,这可以节省你的本地提交.并git stash
用来保存尚未提交的更改.)
编辑: 如果您只有一个本地分支并且正在跟踪一个远程分支,那么您需要做的就是
git pull
Run Code Online (Sandbox Code Playgroud)
从工作目录中.
这将获取所有跟踪的远程分支的当前版本,并将当前分支(和工作目录)更新为它正在跟踪的远程分支的当前版本.
aan*_*dis 77
你想做
git fetch --prune origin
git reset --hard origin/master
git clean -f -d
Run Code Online (Sandbox Code Playgroud)
这使您的本地仓库与远程仓库完全一样.
请记住使用要与其同步的远程和分支替换origin和master.
重置本地存储库并将其与远程分支同步
命令:请记住用要与之同步的远程和分支替换origin和master。
git fetch origin && git reset --hard origin/master && git clean -f -d
Run Code Online (Sandbox Code Playgroud)
或分步进行:
git fetch origin
git reset --hard origin/master
git clean -f -d
Run Code Online (Sandbox Code Playgroud)
现在,您的本地分支是远程分支的精确副本(包括所有内容)。
命令输出:
这是在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$
Run Code Online (Sandbox Code Playgroud)
(此信息来自The Git User's Manual)
我也在学习,所以这可能不完全是问题的答案,但它可能会帮助某人:
git branch -r
)git fetch
. 这不会影响您现有的任何自定义创建的分支。git add origin /path/to/repository
)使用git checkout origin/branch_name
,这将覆盖您在分支上的本地更改branch_name