我有一个从远程仓库fork的代码库,我进行了一些更改,而远程仓库也更新了。现在我想拉取远程仓库中的所有更改,不需要关心本地仓库中任何内容。以前我通常是删除本地代码库,然后简单地fork和克隆。肯定有更好的方法来完成这个操作。有什么神奇的命令吗?
我有一个从远程仓库fork的代码库,我进行了一些更改,而远程仓库也更新了。现在我想拉取远程仓库中的所有更改,不需要关心本地仓库中任何内容。以前我通常是删除本地代码库,然后简单地fork和克隆。肯定有更好的方法来完成这个操作。有什么神奇的命令吗?
如果我理解正确,您想要在本地分支上删除提交记录(如果有的话)。如果是这种情况,您需要执行以下操作:
# fetch updated branch(es) from origin
git fetch origin
# reset, including your work tree, to origin's master branch
# make sure you have your master branch checked out first!
# and also that you don't mind throwing away local commits or
# uncommitted modifications
git reset --hard origin/master
git fetch origin
git checkout -b other origin/master
使用
git diff other..master
你可以比较这两个分支。最后使用
git checkout other
git merge master
你可以将它们合并。另一个有用的工具是cherry-pick,你可以使用它将一些有趣的提交合并到分支中。
git cherry-pick <commit>
git commit -m "All my latest stuff I don't care about"
git branch newstuff refs/remotes/origin/master
git pull
现在你已经拥有了所有的新东西。当然,这是假设你想保留旧的东西。
(假设您的分支是master
,远程命名为origin
)
首先使用以下命令更新您的origin
:
git fetch origin
如果您自上次更新以来没有提交过更改,则可以简单地执行以下操作:
git rebase master origin/master
如果您已经有了一些提交记录,则此快进式合并将无法正常工作。在这种情况下,您可以执行以下操作:
git branch -d master (删除本地主分支)
git checkout -b master origin/master
合并前差异比较:
如果你想在执行merge
之前查看改动,可以执行以下操作:
git fetch origin(总是从远程获取最新的更改)
git diff master origin/master
git rebase origin/master master
。但当然,我不会使用变基,只需使用 git merge --ff-only origin/master
。 - Cascabel