我似乎永远无法弄清楚如何使用git。我只是做随机命令,它最终起作用。这就是我想要推动时通常做的事情:
从上游获取
提交
推送到上游
但是,上述步骤有时无效。例如,当我从上游获取时,我的本地分支不会更新。
如何将远程分支合并到我的本地分支? pull和fetch有区别吗?
答案 0 :(得分:4)
“git pull”相当于“git fetch”,后跟“git merge”
您想要做的是:
git commit -am "your message here"
这会在本地提交您当前的更改,并且仅在本地提交。现在,假设分支“foo”:
git pull origin foo
这是“git fetch”后跟“git merge”。此步骤中的所有内容都将完成到您的本地分支,但仍然对远程分支没有影响。根据git的设置方式,您可能需要指定分支。
如果您遇到合并冲突,则必须修复列出的文件,然后重新添加:
git add path/to/resolved.file
完成后,将您拥有的所有内容从本地更改推送到远程服务器:
git push origin foo
如果在提交之前提取,则可能导致您的本地分支无法更新。
tl;博士,在拉之前总是提交!
答案 1 :(得分:2)
很好理解git fetch和git pull look here之间的差异。
用最简单的术语来说,“git pull”执行“git fetch”后跟a “git merge”。
您可以随时进行“git fetch”更新本地副本 远程分支。此操作永远不会更改您自己的任何分支 并且在不更改工作副本的情况下可以安全地完成。我甚至 听说人们在一个cron工作中定期运行“git fetch” 背景(虽然我不建议这样做)。
在eclipse中使用git可能有点棘手,但是如果你理解git基础知识,你就应该应对它。我建议你阅读一个git tutorials,这样你就能理解基本的git操作。
答案 2 :(得分:1)
学习git的第一步:不要使用egit。
现在,你正从上游获取和拉动。这让我觉得有几个人对同一个存储库有写访问权限,所以我们可能不希望进行大量的合并来使历史复杂化。最好这样做。我假设您已经对您要放置在master
存储库的本地upstream
分支机构进行了更改或一组更改,而这些更改已被其他人推送到您提交。
首先,我们获取新的更改但尚未使用它们。这会将upstream/master
更新为上游master
分支的新负责人。
git fetch upstream master
现在,我们需要引入这些变化。这个命令重写历史,我们假设 您尚未在任何地方发布更改。
git rebase upstream/master master
如果你已经发布了你的更改,那么你应该使用这个更混乱的命令(不要同时使用它们,只需使用这个!)
git merge upstream/master master
现在,我们可以推动:
git push upstream master
对于git pull --rebase
和git pull
版本,前两个步骤可分别缩短为rebase
和merge
。
如果您已经在master
分支上,那么大多数第二个参数都是多余的,但为了清楚起见,我写了它们。值得注意的是,给git-rebase
或git-merge
提供第二个参数只会在执行操作之前检查该分支。只有在您没有将参考设置为自动提取和推送主服务器时,才需要将master
提供给fetch
和push
。