3

我似乎永远无法弄清楚如何使用 git。我只是做随机命令,它最终会起作用。这是我想要推送时通常会做的事情:

  • 从上游获取

  • 犯罪

  • 推送到上游

但是,上述步骤有时不起作用。例如,当我从上游获取时,我的本地分支不会更新。

如何将远程分支合并到本地分支?拉取和获取之间有区别吗?

4

3 回答 3

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;博士,总是在拉动之前提交!

于 2012-08-20T22:43:22.857 回答
2

很好理解 git fetch 和 git pull 之间的区别看这里

用最简单的术语来说,“git pull”会执行“git fetch”,然后是“git merge”。

您可以随时执行“git fetch”来更新远程分支的本地副本。此操作永远不会更改您自己的任何分支,并且无需更改您的工作副本就可以安全地执行此操作。我什至听说有人在后台的 cron 作业中定期运行“git fetch”(尽管我不建议这样做)。

在 eclipse 中使用 git 可能有点棘手,但如果你了解 git 基础知识,你应该能够应付它。我推荐你阅读一本 git教程,这样你就能理解基本的 git 操作。

于 2012-08-20T22:46:57.080 回答
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 pullrebasemerge

如果您已经在master分支上,那么大多数第二个参数都是多余的,但为了清楚起见,我将它们写下来。值得注意的是,给git-rebaseor提供第二个参数git-merge将在执行操作之前简单地检查该分支。仅当您没有将 refs 设置为自动获取和推送 master 时,才需要master提供和fetchpush

于 2012-08-20T22:56:42.510 回答