git fetch到底做了什么?

时间:2017-06-10 12:49:39

标签: git fetch

编辑:在提出问题之前,我已经检查了What does FETCH_HEAD in Git mean? 抱歉原始的不准确的问题。

我的问题是fetch是如何工作的? fetch会丢弃所有当前日志吗?

这是我的情况:我的队友和我正在使用只有一个分支的相同存储库。因此我们必须在推送之前进行取指。
我们通常这样做:

git status
git add .
git commit -m message1
git fetch origin
git reset head
git status
git add .
git commit -m message
git push

但重置后,似乎我之前的提交(message1)已经消失。

这是正常还是有什么问题?
如何访问我的本地历史记录?
他们已经同步但我的当地历史已经消失。

老员工,忘记了:我最近一直在学习Git CLI 有人告诉我键入" git fetch head"跟踪远程分支。
但我想知道这是做什么的?此命令是否覆盖我的本地日志?
" git fetch"之间有什么区别?和" git fetch head" ?

1 个答案:

答案 0 :(得分:4)

您不必进行两次单独的提交,git fetch也不会删除任何日志。

 --o--o--o (origin/master)
          \
           x--x (master: my local commits)

您应该做的是在git fetch命令提取的任何新提交的基础上重新定义本地提交:

git fetch

--o--o--o--O--O (origin/master updated)
         \
          x--x (master)

git rebase origin/master

--o--o--o--O--O (origin/master updated)
               \
                x'--x' (master rebased)

git push

--o--o--o--O--O--x'--x' (origin/master, master)

更简单,since Git 2.6,我会使用配置:

git config pull.rebase true
git config rebase.autoStash true

然后,一个简单的git pull会在origin/master之上自动重播您的本地提交。然后你可以git push