我似乎永远无法弄清楚如何使用 git。我只是做随机命令,它最终会起作用。这是我想要推送时通常会做的事情:
从上游获取
犯罪
推送到上游
但是,上述步骤有时不起作用。例如,当我从上游获取时,我的本地分支不会更新。
如何将远程分支合并到本地分支?拉取和获取之间有区别吗?
“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;博士,总是在拉动之前提交!
很好理解 git fetch 和 git pull 之间的区别看这里。
用最简单的术语来说,“git pull”会执行“git fetch”,然后是“git merge”。
您可以随时执行“git fetch”来更新远程分支的本地副本。此操作永远不会更改您自己的任何分支,并且无需更改您的工作副本就可以安全地执行此操作。我什至听说有人在后台的 cron 作业中定期运行“git fetch”(尽管我不建议这样做)。
在 eclipse 中使用 git 可能有点棘手,但如果你了解 git 基础知识,你应该能够应付它。我推荐你阅读一本 git教程,这样你就能理解基本的 git 操作。
学习 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
or提供第二个参数git-merge
将在执行操作之前简单地检查该分支。仅当您没有将 refs 设置为自动获取和推送 master 时,才需要master
提供和fetch
。push