我想做一个,git pull
但是直到特定的提交。
A->B->C->D->E->F (Remote master HEAD)
所以假设我的local master
HEAD指向B
,我想一直坚持下去E
。我该怎么办 ?
这不是拉特定的提交,而是拉特定的提交。
我想做一个,git pull
但是直到特定的提交。
A->B->C->D->E->F (Remote master HEAD)
所以假设我的local master
HEAD指向B
,我想一直坚持下去E
。我该怎么办 ?
这不是拉特定的提交,而是拉特定的提交。
git fetch
和git merge E
。
Answers:
git pull
不过git fetch
后面git merge
。所以你可以做的是
git fetch remote example_branch
git merge <commit_hash>
git merge E
将E
与其所有祖先合并(C
并且D
git知道这一点,A
并且B
不需要合并,因为它们已经在您的分支中了)。如果您只想更改,E
则应git cherry-pick E
改为。
首先,从远程仓库中获取最新的提交。这不会影响您的本地分支机构。
git fetch origin
然后检出远程跟踪分支并执行git日志以查看提交
git checkout origin/master
git log
抓住您要合并的提交的提交哈希(或只是它的前5个字符),然后将该提交合并到master中
git checkout master
git merge <commit hash>
git fetch
在写此类废话之前阅读手册。除此之外,您应该阅读原始问题和我的答案。如果您遵循我的回答,那么您将不会像我明确指示用户那样“恢复历史” git checkout master
。总体而言,如果您不清楚自己的工作至少50%,请不要发布任何内容。
git fetch origin
显式地获取origin。
您还可以拉最新的提交,然后撤消直到您需要的提交为止:
git pull origin master
git reset --hard HEAD~1
替换master
为所需的分支。
使用git log查看您要还原到的提交:
git log
就个人而言,这对我来说更好。
基本上,这是提取最新的提交,然后您手动逐个还原提交。使用git log来查看提交历史。
优点:如广告所示。您不必使用提交哈希或拉出不需要的分支。
坏点:您需要将提交还原一次。
警告:提交/存储所有本地更改,因为随着--hard
您丢失这些更改。使用风险自负!
HEAD
先退一步,而如果您必须解决冲突,我不知道会发生什么。但是此解决方案允许git pull --rebase
,并且与所说的相反,您可以使用来直接重置回N
提交git reset --hard HEAD~N
(即3次提交git reset --hard HEAD~3
)。
git reset --hard SHA
,它将重置为所需的提交,而无需倒数。
如果将提交合并到分支中,则应该获取所有历史记录。
观察:
$ git init ./ 在/Users/dfarrell/git/demo/.git/中初始化了空的Git存储库 $ echo'a'>字母 $ git添加字母 $ git commit -m'首写字母' [master(root-commit)6e59e76]首字母 更改1个文件,插入1个(+) 创建模式100644字母 $ echo'b'>>字母 $ git add letter && git commit -m'添加字母' [master 7126e6d]加字母 更改1个文件,插入1个(+) $ echo'c'>>字母; git add letter && git commit -m'添加字母' [master f2458be]加字母 更改1个文件,插入1个(+) $ echo'd'>>字母; git add letter && git commit -m'添加字母' [master 7f77979]添加字母 更改1个文件,插入1个(+) $ echo'e'>>字母; git add letter && git commit -m'添加字母' [mastere 790eade]加字母 更改1个文件,插入1个(+) $ git日志 提交790eade367b0d8ab8146596cd717c25fd895302a 作者:丹·法瑞尔 日期:2015年7月16日星期四14:21:26 -0500 加字母 提交7f77979efd17f277b4be695c559c1383d2fc2f27 作者:丹·法瑞尔 日期:2015年7月16日星期四14:21:24 -0500 加字母 提交f2458bea7780bf09fe643095dbae95cf97357ccc 作者:丹·法瑞尔 日期:2015年7月16日星期四14:21:19 -0500 加字母 提交7126e6dcb9c28ac60cb86ae40fb358350d0c5fad 作者:丹·法瑞尔 日期:2015年7月16日星期四14:20:52 -0500 加字母 提交6e59e7650314112fb80097d7d3803c964b3656f0 作者:丹·法瑞尔 日期:2015年7月16日星期四14:20:33 -0500 首字母 $ git checkout 6e59e7650314112fb80097d7d3803c964b3656f $ git checkout 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad 注意:签出“ 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad”。 您处于“分离头”状态。您可以环顾四周,进行实验 更改并提交,您可以放弃在此所做的任何提交 状态,而不会通过执行另一个结帐来影响任何分支。 如果您想创建一个新分支来保留您创建的提交,则可以 (现在或以后)通过再次将-b与checkout命令一起使用来执行此操作。例: git checkout -b new_branch_name HEAD现在位于7126e6d ...添加字母 $ git checkout -b B 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad 切换到新的分支“ B” $ git pull 790eade367b0d8ab8146596cd717c25fd895302a 严重的:'790eade367b0d8ab8146596cd717c25fd895302a'似乎不是git存储库 致命:无法从远程存储库读取。 请确保您具有正确的访问权限 并且存储库存在。 $ git merge 7f77979efd17f277b4be695c559c1383d2fc2f27 正在更新7126e6d..7f77979 快进 信| 2 ++ 更改1个文件,插入2次(+) $猫字母 一种 b C d
我从该视频中找到了更新的答案,接受的答案对我不起作用。
首先使用git clone <HTTPs link of the project>
(或使用SSH)从git(如果还没有)克隆最新的仓库,
然后使用转到欲望分支
git checkout <branch name>
。
使用命令
git log
检查最新提交。复制特定提交的代码。然后使用命令
git fetch origin <Copy paste the shal here>
按回车键后。现在使用命令
git checkout FETCH_HEAD
现在,特定的提交将对您的本地用户可用。更改任何内容,然后使用推送代码git push origin <branch name>
。就这样。查看视频以供参考。
这对我有用:
git pull origin <sha>
例如
[dbn src]$ git fetch
[dbn src]$ git status
On branch current_feature
Your branch and 'origin/master' have diverged,
and have 2 and 7 different commits each, respectively.
...
[dbn src]$ git log -3 --pretty=oneline origin/master
f4d10ad2a5eda447bea53fed0b421106dbecea66 CASE-ID1: some descriptive msg
28eb00a42e682e32bdc92e5753a4a9c315f62b42 CASE-ID2: I'm so good at writing commit titles
ff39e46b18a66b21bc1eed81a0974e5c7de6a3e5 CASE-ID2: woooooo
[dbn src]$ git pull origin 28eb00a42e682e32bdc92e5753a4a9c315f62b42
[dbn src]$ git status
On branch current_feature
Your branch and 'origin/master' have diverged,
and have 2 and 1 different commits each, respectively.
...
这会拉28eb00,ff39e4和之前的所有内容,但不会拉f4d10ad。它允许使用pull --rebase,并尊重gitconfig中的pull设置。之所以有效,是因为您基本上将28eb00视为一个分支。
对于我使用的git版本,此方法需要完整的提交哈希-不允许使用缩写或别名。您可以执行以下操作:
[dbn src]$ git pull origin `git rev-parse origin/master^`