代码之家  ›  专栏  ›  技术社区  ›  Hans

了解git获取然后合并

git
  •  59
  • Hans  · 技术社区  · 14 年前

    来自svn的背景,我有一个问题:

    git equivalent of svn status -u

    svn status -u

    我明白,你确实:

    git fetch
    git log ..origin/master
    

    origin/master 部分取决于分支?如果我跟踪一个远程分支,它不一定是主控的?

    我也不明白 git merge origin/master 没错。我猜这就是这个意思 git fetch 从远程获取更改并将它们作为origin/master放入git数据库系统,而我只是master?如果我获取了更改,检查了所做的操作,对这些更改感到恐惧,并且不想合并,该怎么办?我怎么才能基本上抛弃他们?

    2 回复  |  直到 8 年前
        1
  •  121
  •   Jakub Narębski adamtaub    14 年前

    git获取

    git fetch 从远程存储库获取更改并将其放入存储库的对象数据库中。它还从远程存储库获取分支并将它们存储为 .

       7987baa..2086e7b  master -> origin/master
    

    获取时。这意味着“origin/master”存储在“origin”存储库中“master”所在的位置。

    如果你检查 .git/config 文件中,您将看到以下片段:

    [remote "origin"]
            url = git://git.example.com/repo.git
            fetch = +refs/heads/*:refs/remotes/origin/*
    

    这(除其他外)意味着origin remote(克隆自的存储库)中的任何分支“A”(“refs/heads/A”)都将另存为“origin/A”(“refs/remotes/origin/A”)。

    git日志..源/主

    git log ..origin/master ,相当于 git log HEAD..origin/master ,在“master”分支上时等于 git log master..origin/master

    现代git中更通用的版本(假设存在上游/跟踪信息)是使用

    $ git log ..@{u}
    

    (此处) @{u} 是的同义词 @{upstream} ,请参见 gitrevisions

    git合并源/主

    git merge 用于连接两条历史线。如果其中一个边在最后一个分支点(自merge base)之后没有做任何工作,则情况是 快进 (您所在的分支只是更新到您正在合并的分支的顶端),或者 最新的

    git获取 然后 git merge origin/master ,在“主”分支上时,等于发出

    $ git pull
    

    如果你不想合并,你不需要。请注意,您可以使用例如。 git reset --hard HEAD@{1} git pull 如果你不喜欢的话。

        2
  •  6
  •   strager    14 年前

    git fetch origin/master

    git merge 通过创建新的提交或快进(或组合)将两个分支合并在一起。它不会更改您所做的任何提交,并且您可以随时回滚到旧分支(使用 git reset git checkout ).

    请注意 git pull 然后 合并分支 (或 git rebase 如果 --rebase