Git pull 直到一个特定的提交
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/31462683/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Git pull till a particular commit
提问by Ninja420
I want to do a git pull
but only till a specific commit.
我想做一个git pull
但只到一个特定的提交。
A->B->C->D->E->F (Remote master HEAD)
so suppose my local master
HEAD points to B
, and I want to pull till E
. What should I do ?
所以假设我的local master
HEAD 指向B
,我想拉到E
。我该怎么办 ?
This is not pulling a specific commit, this is pulling upto a specific commit.
这不是拉特定的提交,而是拉到特定的提交。
回答by unrealsoul007
git pull
is nothing but git fetch
followed by git merge
. So what you can do is
git pull
无非是跟在git fetch
后面git merge
。所以你能做的是
git fetch remote example_branch
git fetch remote example_branch
git merge <commit_hash>
git merge <commit_hash>
回答by developerbmw
First, fetch the latest commits from the remote repo. This will not affect your local branch.
首先,从远程仓库获取最新的提交。这不会影响您当地的分支机构。
git fetch origin
Then checkout the remote tracking branch and do a git log to see the commits
然后签出远程跟踪分支并执行 git log 以查看提交
git checkout origin/master
git log
Grab the commit hash of the commit you want to merge up to (or just the first ~5 chars of it) and merge that commit into master
获取您想要合并的提交的提交哈希(或只是它的前 5 个字符)并将该提交合并到 master
git checkout master
git merge <commit hash>
回答by Placeholder
You can also pull the latest commit and just undo until the commit you desire:
您还可以拉取最新的提交并撤消直到您想要的提交:
git pull origin master
git reset --hard HEAD~1
Replace master
with your desired branch.
替换master
为您想要的分支。
Use git log to see to which commit you would like to revert:
使用 git log 来查看您要还原到哪个提交:
git log
Personally, this has worked for me better.
就个人而言,这对我更有效。
Basically, what this does is pulls the latest commit, and you manually revert commits one by one. Use git log in order to see commit history.
基本上,它的作用是拉取最新的提交,然后您手动一一还原提交。使用 git log 来查看提交历史。
Good points:Works as advertised. You don't have to use commit hash or pull unneeded branches.
优点:如宣传的那样工作。您不必使用提交哈希或拉取不需要的分支。
Bad points:You need to revert commits on by one.
缺点:您需要逐个还原提交。
WARNING:Commit/stash all your local changes, because with --hard
you are going to lose them. Use at your own risk!
警告:提交/存储所有本地更改,因为--hard
您将丢失它们。使用风险自负!
回答by Daniel Farrell
If you merge a commit into your branch, you should get all the history between.
如果您将提交合并到您的分支中,您应该获得所有的历史记录。
Observe:
观察:
$ git init ./ Initialized empty Git repository in /Users/dfarrell/git/demo/.git/ $ echo 'a' > letter $ git add letter $ git commit -m 'Initial Letter' [master (root-commit) 6e59e76] Initial Letter 1 file changed, 1 insertion(+) create mode 100644 letter $ echo 'b' >> letter $ git add letter && git commit -m 'Adding letter' [master 7126e6d] Adding letter 1 file changed, 1 insertion(+) $ echo 'c' >> letter; git add letter && git commit -m 'Adding letter' [master f2458be] Adding letter 1 file changed, 1 insertion(+) $ echo 'd' >> letter; git add letter && git commit -m 'Adding letter' [master 7f77979] Adding letter 1 file changed, 1 insertion(+) $ echo 'e' >> letter; git add letter && git commit -m 'Adding letter' [master 790eade] Adding letter 1 file changed, 1 insertion(+) $ git log commit 790eade367b0d8ab8146596cd717c25fd895302a Author: Dan Farrell Date: Thu Jul 16 14:21:26 2015 -0500 Adding letter commit 7f77979efd17f277b4be695c559c1383d2fc2f27 Author: Dan Farrell Date: Thu Jul 16 14:21:24 2015 -0500 Adding letter commit f2458bea7780bf09fe643095dbae95cf97357ccc Author: Dan Farrell Date: Thu Jul 16 14:21:19 2015 -0500 Adding letter commit 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad Author: Dan Farrell Date: Thu Jul 16 14:20:52 2015 -0500 Adding letter commit 6e59e7650314112fb80097d7d3803c964b3656f0 Author: Dan Farrell Date: Thu Jul 16 14:20:33 2015 -0500 Initial Letter $ git checkout 6e59e7650314112fb80097d7d3803c964b3656f $ git checkout 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad Note: checking out '7126e6dcb9c28ac60cb86ae40fb358350d0c5fad'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at 7126e6d... Adding letter $ git checkout -b B 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad Switched to a new branch 'B' $ git pull 790eade367b0d8ab8146596cd717c25fd895302a fatal: '790eade367b0d8ab8146596cd717c25fd895302a' does not appear to be a git repository fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. $ git merge 7f77979efd17f277b4be695c559c1383d2fc2f27 Updating 7126e6d..7f77979 Fast-forward letter | 2 ++ 1 file changed, 2 insertions(+) $ cat letter a b c d