Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同步本地Git存储库与远程Git存储库_Git - Fatal编程技术网

同步本地Git存储库与远程Git存储库

同步本地Git存储库与远程Git存储库,git,Git,我想将我的本地存储库与远程存储库同步,以便我的本地存储库成为远程存储库的100%副本-这意味着如果这些存储库中的某些文件不同,我们将用远程存储库覆盖本地存储库,如果本地存储库中的文件在远程存储库中不存在,本地文件将被删除 除了对远程存储库进行新的克隆之外,还有其他方法可以实现这一点吗 类似于。的问题,您可以使用。只需创建一个钩子,在更新后将更改的内容推送到另一个repo 当然,您可能会遇到合并冲突,因此您必须考虑如何处理这些冲突。您需要了解,Git存储库不仅是目录树和文件树,而且还存储这些树的历

我想将我的本地存储库与远程存储库同步,以便我的本地存储库成为远程存储库的100%副本-这意味着如果这些存储库中的某些文件不同,我们将用远程存储库覆盖本地存储库,如果本地存储库中的文件在远程存储库中不存在,本地文件将被删除

除了对远程存储库进行新的克隆之外,还有其他方法可以实现这一点吗

类似于。

的问题,您可以使用。只需创建一个钩子,在更新后将更改的内容推送到另一个repo


当然,您可能会遇到合并冲突,因此您必须考虑如何处理这些冲突。

您需要了解,Git存储库不仅是目录树和文件树,而且还存储这些树的历史记录,其中可能包含分支和合并

从存储库获取时,您将把那里的所有或部分分支复制到存储库中。然后,这些分支在您的存储库中作为“远程跟踪分支”,例如名为
remotes/origin/master
之类的分支

从远程存储库获取新提交不会改变本地工作副本的任何内容

您的工作副本通常有一个已签出的提交,称为
HEAD
。此提交通常是某个本地分支的提示

我认为您需要将您的本地分支(或者所有本地分支?)更新到相应的远程分支,然后签出最新的分支

为了避免与您的工作副本(可能有本地更改)发生任何冲突,您首先清理所有未进行版本控制的内容(使用
git clean
)。然后签出与要更新到的远程分支相对应的本地分支,并使用
git reset
将其切换到获取的远程分支。(
git pull
将把远程分支的所有更新合并到本地分支中,本地分支可能也会这样做,或者如果有本地提交,则创建合并提交。)

(但是,您将真正丢失任何本地更改—包括工作副本和本地提交中的更改。请确保您确实需要此更改—否则最好使用新分支,这样可以保存您的本地提交。并使用
git stash
保存尚未提交的更改。)


编辑: 如果您只有一个本地分支,并且正在跟踪一个远程分支,那么您需要做的就是

git pull
从工作目录中


这将获取所有跟踪的远程分支的当前版本,并将当前分支(和工作目录)更新为它正在跟踪的远程分支的当前版本。

听起来您想要远程存储库的镜像:

git clone --mirror url://to/remote.git local.git
该命令将创建一个空存储库。如果你不想要一个简单的存储库,事情会变得更复杂。

(此信息来自)

我也在学习,所以这可能不是问题的确切答案,但它可能会帮助某些人:

  • 最初克隆远程存储库时,所有分支的副本都存储在本地存储库中(使用
    git branch-r
    查看它们)
  • 要更新这些副本并使其成为当前副本(即与远程分支同步),请使用
    git fetch
    。这不会影响任何现有的、自定义创建的分支
  • 要覆盖本地分支签出您正在处理的任何分支的新版本(假设您已经执行了
    git add origin/path/To/repository
    ),请使用
    git checkout origin/branch\u name
    ,这将覆盖您对分支
    branch\u name
    的本地更改

  • 这些步骤可以做到这一点:

    git reset --hard HEAD
    git clean -f -x -d -n
    
    然后没有
    -n

    这将考虑所有本地更改。现在提交

    git status
    
    并注意行,例如:

    Your branch is ahead of 'xxxx' by N commits.
    
    记下数字“N” 现在:

    最后:

    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#这将更新本地回购的“远程”部分。
    git重置——硬原点/
    #这将使您的本地副本与远程内容同步,并丢弃任何已提交的内容
    #或未提交的更改。
    
    尽管在此之后本地提交和更改将消失,但如有必要,可以恢复提交的更改

    git fetch --prune
    
    -p,--prune

    获取后,删除远程服务器上不再存在的任何远程跟踪分支

    你想做什么

    git fetch --prune origin
    git reset --hard origin/master
    git clean -f -d
    
    这使得本地回购与远程回购完全相同


    请记住将“原始”和“主”替换为要与之同步的“远程”和“分支”。

    如果要同步分叉回购,则可以按照以下步骤操作

    git fetch origin && git reset --hard origin/master && git clean -f -d
    
    如何从git同步fork存储库

  • 检查您当前的git分支

    git分行

  • 如果您不在master上,请签出到master

    git签出主机

  • 如果您具有正确的访问权限,请获取上游存储库

    git取上游

  • 如果您得到以下错误,然后运行

    git远程添加上游git@github.com:上游\克隆\回购\ 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取上游

  • 现在,如果您在master上,则将上游/主分支合并到master分支中

    git合并上游/master

    就这样

    通过更具体的
    git-remote-v
    git-remote命令进行交叉检查

    如果我还拥有上游回购的承诺权,我可以创建一个本地上游分支机构,并在那里开展上游工作


  • 重置和同步本地
    git fetch origin && git reset --hard origin/master && git clean -f -d
    
    git fetch origin
    git reset --hard origin/master
    git clean -f -d
    
    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 config --global push.default current