Предполагая, что вы уже зафиксировали свои изменения, я бы использовал rebase (если вы еще не работаете над вашими изменениями, тогда вы можете захотеть сохранить их в своей локальной копии).
Rebase будет сравнивать две ветви и палить изменения вашей текущей ветви (например, локальные изменения), потяните другую ветвь (например, удаленную), и воспроизводить ваши изменения на верхнем один-на-один
Rebase работает, когда вы уже зафиксировали свои изменения. Например,
master: A - B - C
origin/master: A - B - D
перебазирования мастер по происхождению/мастер превращает это в
master: A - B - D -C
Там будет вариант удобства для этого с мерзавцем тянуть
git pull --rebase
Я, как правило, также нравится чтобы использовать интерактивную перебазу, которая дает вам больше гибкости, позволяя вам переименовывать коммиты, переупорядочивать их, выкапывать их в другие коммиты и т. д.
git rebase -i origin/master
Одно предостережение с перебазироваться, что она будет воссоздать все фиксаций это rebases. Это означает, что все они будут получать новые ША и что Git не воспринимает их как то же самое совершает
EDIT:
Если вы не хотите, чтобы перебазировать, то вы должны быть в состоянии использовать сброс.
git reset <commit>
В ниже я добавить «плохую фиксацию» и хочу откатить мой журнал, сохраняя изменения с плохой фиксацией в моей рабочей копии. Я использую псевдоним HEAD ~ 1, но вы также можете дать ему SHA.
[email protected] 2.1.3p242 ~/repos/spy_rb (master) $ git log origin/master -1
commit 8fd6a1a7704d2c0dc1323c4d8e5e169c169c833c
Author: Josh Bodah <[email protected]>
Date: Thu Dec 18 17:55:14 2014 -0500
generate tags in change_version
[email protected] 2.1.3p242 ~/repos/spy_rb (master) $ git log -2
commit b925445207000905d535e715a06d312ca65be5c1
Author: Josh Bodah <[email protected]>
Date: Tue Dec 30 09:31:36 2014 -0500
bad commit
commit 8fd6a1a7704d2c0dc1323c4d8e5e169c169c833c
Author: Josh Bodah <[email protected]>
Date: Thu Dec 18 17:55:14 2014 -0500
generate tags in change_version
[email protected] 2.1.3p242 ~/repos/spy_rb (master) $ git log origin/master -1
commit 8fd6a1a7704d2c0dc1323c4d8e5e169c169c833c
Author: Josh Bodah <[email protected]>
Date: Thu Dec 18 17:55:14 2014 -0500
generate tags in change_version
[email protected] 2.1.3p242 ~/repos/spy_rb (master) $ git reset HEAD~1
Unstaged changes after reset:
M README.md
[email protected] 2.1.3p242 ~/repos/spy_rb (master) $ git log -1
commit 8fd6a1a7704d2c0dc1323c4d8e5e169c169c833c
Author: Josh Bodah <[email protected]>
Date: Thu Dec 18 17:55:14 2014 -0500
generate tags in change_version
[email protected] 2.1.3p242 ~/repos/spy_rb (master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
Вы прочитали: http://stackoverflow.com/questions/23865335/sourcetree-undo-unpushed-commits? –
Я не уверен насчет «мягкого сброса» и «жесткого сброса»? –
Жесткий сброс полностью отменит ваши изменения, soft сохранит их в вашей локальной копии –