Git command to reset to previous commit without losing commits
Case:
The commit history is:
A -> B -> C -> D
I hope to reset the current work dir to B on current branch with history:
A -> B -> C -> D -> E
The result of the tree is same to B
, which means
git diff B..E --name-only
should returns empty list.
A stupid way is:
# we assume current work directory is `tree`, and branch is `master`
# and work directory HEAD at `D`
# reset HEAD to D
cd tree
git checkout -f D
# create a copy work directory
cd ..
rm -rf copy
cp -r tree copy
# clean old work directory
rm -rf tree
mkdir tree
cp -r copy/.git tree/.git
# reset copy directory to revision `B`
cd copy
git checkout -f B
# copy tree from copy directory to tree
rm -rf .git
cp -r ./.* ./* ../tree
# commit changes, current revision is we wanted `E`
git add .
git ci -m 'revert to commit B'
Is there a simplified way to do this?
git
add a comment |
Case:
The commit history is:
A -> B -> C -> D
I hope to reset the current work dir to B on current branch with history:
A -> B -> C -> D -> E
The result of the tree is same to B
, which means
git diff B..E --name-only
should returns empty list.
A stupid way is:
# we assume current work directory is `tree`, and branch is `master`
# and work directory HEAD at `D`
# reset HEAD to D
cd tree
git checkout -f D
# create a copy work directory
cd ..
rm -rf copy
cp -r tree copy
# clean old work directory
rm -rf tree
mkdir tree
cp -r copy/.git tree/.git
# reset copy directory to revision `B`
cd copy
git checkout -f B
# copy tree from copy directory to tree
rm -rf .git
cp -r ./.* ./* ../tree
# commit changes, current revision is we wanted `E`
git add .
git ci -m 'revert to commit B'
Is there a simplified way to do this?
git
This is just an all-files variant of stackoverflow.com/q/215718/1256452, not sure if I should close as duplicate though.
– torek
Nov 22 '18 at 23:21
add a comment |
Case:
The commit history is:
A -> B -> C -> D
I hope to reset the current work dir to B on current branch with history:
A -> B -> C -> D -> E
The result of the tree is same to B
, which means
git diff B..E --name-only
should returns empty list.
A stupid way is:
# we assume current work directory is `tree`, and branch is `master`
# and work directory HEAD at `D`
# reset HEAD to D
cd tree
git checkout -f D
# create a copy work directory
cd ..
rm -rf copy
cp -r tree copy
# clean old work directory
rm -rf tree
mkdir tree
cp -r copy/.git tree/.git
# reset copy directory to revision `B`
cd copy
git checkout -f B
# copy tree from copy directory to tree
rm -rf .git
cp -r ./.* ./* ../tree
# commit changes, current revision is we wanted `E`
git add .
git ci -m 'revert to commit B'
Is there a simplified way to do this?
git
Case:
The commit history is:
A -> B -> C -> D
I hope to reset the current work dir to B on current branch with history:
A -> B -> C -> D -> E
The result of the tree is same to B
, which means
git diff B..E --name-only
should returns empty list.
A stupid way is:
# we assume current work directory is `tree`, and branch is `master`
# and work directory HEAD at `D`
# reset HEAD to D
cd tree
git checkout -f D
# create a copy work directory
cd ..
rm -rf copy
cp -r tree copy
# clean old work directory
rm -rf tree
mkdir tree
cp -r copy/.git tree/.git
# reset copy directory to revision `B`
cd copy
git checkout -f B
# copy tree from copy directory to tree
rm -rf .git
cp -r ./.* ./* ../tree
# commit changes, current revision is we wanted `E`
git add .
git ci -m 'revert to commit B'
Is there a simplified way to do this?
git
git
asked Nov 22 '18 at 8:13
kcatskcats
489314
489314
This is just an all-files variant of stackoverflow.com/q/215718/1256452, not sure if I should close as duplicate though.
– torek
Nov 22 '18 at 23:21
add a comment |
This is just an all-files variant of stackoverflow.com/q/215718/1256452, not sure if I should close as duplicate though.
– torek
Nov 22 '18 at 23:21
This is just an all-files variant of stackoverflow.com/q/215718/1256452, not sure if I should close as duplicate though.
– torek
Nov 22 '18 at 23:21
This is just an all-files variant of stackoverflow.com/q/215718/1256452, not sure if I should close as duplicate though.
– torek
Nov 22 '18 at 23:21
add a comment |
2 Answers
2
active
oldest
votes
Just revert the intermediate commits:
git revert D C
You might need to squash the resulting commits then.
This leads to two problems: the first is it will create multiple commits, the result will beA -> B -> C -> D -> D' -> C'
, and the second is that may be meat a merge commit or conflicts, it could not be handled automatically.
– kcats
Nov 22 '18 at 8:19
add a comment |
checkout files in commit B
git checkout B -- .
you can see the changes B and D
git diff HEAD
then commit it
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53426452%2fgit-command-to-reset-to-previous-commit-without-losing-commits%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Just revert the intermediate commits:
git revert D C
You might need to squash the resulting commits then.
This leads to two problems: the first is it will create multiple commits, the result will beA -> B -> C -> D -> D' -> C'
, and the second is that may be meat a merge commit or conflicts, it could not be handled automatically.
– kcats
Nov 22 '18 at 8:19
add a comment |
Just revert the intermediate commits:
git revert D C
You might need to squash the resulting commits then.
This leads to two problems: the first is it will create multiple commits, the result will beA -> B -> C -> D -> D' -> C'
, and the second is that may be meat a merge commit or conflicts, it could not be handled automatically.
– kcats
Nov 22 '18 at 8:19
add a comment |
Just revert the intermediate commits:
git revert D C
You might need to squash the resulting commits then.
Just revert the intermediate commits:
git revert D C
You might need to squash the resulting commits then.
edited Nov 22 '18 at 8:19
answered Nov 22 '18 at 8:16
chorobachoroba
157k14142205
157k14142205
This leads to two problems: the first is it will create multiple commits, the result will beA -> B -> C -> D -> D' -> C'
, and the second is that may be meat a merge commit or conflicts, it could not be handled automatically.
– kcats
Nov 22 '18 at 8:19
add a comment |
This leads to two problems: the first is it will create multiple commits, the result will beA -> B -> C -> D -> D' -> C'
, and the second is that may be meat a merge commit or conflicts, it could not be handled automatically.
– kcats
Nov 22 '18 at 8:19
This leads to two problems: the first is it will create multiple commits, the result will be
A -> B -> C -> D -> D' -> C'
, and the second is that may be meat a merge commit or conflicts, it could not be handled automatically.– kcats
Nov 22 '18 at 8:19
This leads to two problems: the first is it will create multiple commits, the result will be
A -> B -> C -> D -> D' -> C'
, and the second is that may be meat a merge commit or conflicts, it could not be handled automatically.– kcats
Nov 22 '18 at 8:19
add a comment |
checkout files in commit B
git checkout B -- .
you can see the changes B and D
git diff HEAD
then commit it
add a comment |
checkout files in commit B
git checkout B -- .
you can see the changes B and D
git diff HEAD
then commit it
add a comment |
checkout files in commit B
git checkout B -- .
you can see the changes B and D
git diff HEAD
then commit it
checkout files in commit B
git checkout B -- .
you can see the changes B and D
git diff HEAD
then commit it
answered Nov 22 '18 at 9:09
jumpgoblinjumpgoblin
13
13
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53426452%2fgit-command-to-reset-to-previous-commit-without-losing-commits%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
This is just an all-files variant of stackoverflow.com/q/215718/1256452, not sure if I should close as duplicate though.
– torek
Nov 22 '18 at 23:21