了解git fetch然后合并

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

git相当于svn status -u

(什么是git等效于git merge origin/master

据我了解,您这样做:

git fetch
git log ..origin/master

但是,我猜git merge origin/master部分取决于分支? 如果我正在跟踪远程分支,它不一定是主服务器吗?

我也不太了解git merge origin/master。 我猜这只是意味着git fetch从远程获取了更改并将它们作为origin / master放入git数据库系统,而我只是master? 如果我获取更改,检查已完成,对更改感到恐惧而又不想合并该怎么办? 我如何基本上放弃它们?

Hans asked 2019-10-08T09:36:38Z
2个解决方案
116 votes

git获取

git reset --hard HEAD@{1}从远程存储库中获取更改,并将其放入存储库的对象数据库中。 它还从远程存储库中获取分支并将其存储为远程跟踪分支。

当您获取git时,它会告诉您它将每个分支存储在其获取的远程存储库中的位置。 例如,您应该看到类似

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

在获取时。 这意味着“来源/母版”将“母版”存储在“来源”存储库中。

如果检查git reset --hard HEAD@{1}文件,则会看到以下片段:

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

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

git log ..origin / master

如您所见,“ origin / master”在来源上是“ master”。 如果您在(默认)“ master”分支上,则git reset --hard HEAD@{1}(相当于git pull)(在“ master”分支上等效于git log master..origin/master)将列出远程存储库中“ master”分支上的所有提交,但不在 您在其中工作的本地“大师”分支。

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

$ git log ..@{u}

(此处git reset --hard HEAD@{1}git pull的同义词,请参见gitrevisions手册页)。

git merge原始/主

git reset --hard HEAD@{1}用于合并两条历史记录。 如果自上一个分支点以来(自合并基数起)双方均未做任何工作,则情况可能是快进(您所在的分支只是更新为要合并的分支的尖端),或者是向上- 迄今为止(没有新的要合并的内容,并且您所在的分支保持不变)。

git reset --hard HEAD@{1},然后是git pull(在“主”分支上)等效于发行

$ git pull

如果您不想合并,则不需要。 请注意,您可以使用 git reset --hard HEAD@{1}返回并丢弃git pull的结果(如果您不喜欢它)。

Jakub Narębski answered 2019-10-08T09:38:18Z
5 votes

git pull下载代表给定远程分支所需的所有更改。 通常,这是git fetch或类似的值。

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

请注意git pullgit fetch,后跟git merge(如果给出--rebase,则是git rebase)。

strager answered 2019-10-08T09:38:59Z
translate from https://stackoverflow.com:/questions/3419658/understanding-git-fetch-then-merge