实际上,Git存储库和本地文件完全相同。
但是另一个网站距离最新的5个提交很远,所以我有一段时间没有拉取过,并且我也不想这样做。
所以现在我想对我的本地文件进行一些更改,然后将其推送到Git存储库的一个新提交中,然后只能拉取该单个提交而不是所有其他提交...我可以做到这一点吗?
我甚至不想删除那些提交,只是希望能够拉取1个提交,希望你能帮帮我。
实际上,Git存储库和本地文件完全相同。
但是另一个网站距离最新的5个提交很远,所以我有一段时间没有拉取过,并且我也不想这样做。
所以现在我想对我的本地文件进行一些更改,然后将其推送到Git存储库的一个新提交中,然后只能拉取该单个提交而不是所有其他提交...我可以做到这一点吗?
我甚至不想删除那些提交,只是希望能够拉取1个提交,希望你能帮帮我。
git pull
实际上是 git fetch
(将远程提交下载到追踪分支)和 git merge
(将你的 HEAD
,即当前提交与刚刚下载的提交合并)的缩写。
你可以通过解耦这两个步骤来获得期望的灵活性:
首先运行 git fetch
,然后检查你刚刚下载的历史记录(如果你在 master
分支上工作,则 git fetch
应该已经在 origin/master
分支中下载了远程提交,你可以使用 git log origin/master
来检查)。
然后,使用 git merge <commit>
合并你想要的提交。注意: git merge
将获取所有在 <commit>
和其祖先中的更改,因此如果 <commit>
是最旧的未合并提交,则此方法适用。如果你没有任何未推送的提交,这将“快进”,即不会创建一个新的提交,而只是将 HEAD
推到该提交。如果你对 git merge
不满意,还有其他选项,如 git rebase
,git cherry-pick
等。
origin
,分支名称为master
,运行以下命令:git fetch && git merge $(git rev-list master..origin/master | tail -n1)
。这将执行以下操作:
git fetch
以更新 origin/master
master
到origin/master
之后的提交哈希列表(git rev-list
),并获取最后一行(tail
),即第一个新提交git merge
git reset --hard <commit>
git checkout -b foo
这是一种简写形式
git branch foo
git checkout foo
git clone -b *foo* http//dude@:bitbucket.org
或类似的东西
git clone -b *foo* ssh://git@bitbucket.org/path/to/repo.git