2016-06-21 5 views
0

Я хочу скопировать последнюю фиксацию, и я хочу сделать новую фиксацию из скопированной фиксации (последняя фиксация), чтобы нажать на удаленную ветку.Как скопировать последнюю фиксацию как новую фиксацию в Git?

Я попробовал этот код:

git rm -r . 
git checkout HEAD~0 . 
git commit -m "My new Commit" 

Но это не сработало. какие-либо предложения?

+0

Возможный дубликат [Вдвигания пустых фиксаций к удаленному] (http://stackoverflow.com/questions/20138640/pushing-empty-commits-to-remote) –

+0

Вы хотите скопировать свой последний коммит и внести в него изменения для создания нового коммита или вы хотите сделать точную копию своего последнего коммита без изменения? –

+0

Что именно вы используете? Вы хотите получить другой комментарий? – MikeMB

ответ

1

Если вы просто хотите скопировать последний коммит и играть в нее в качестве нового коммита в другой отрасли, попробуйте GIT вишнево-забрать

4

Если ваша история C-B-A (где A является последним), вам должно быть что-то изменить, чтобы сделать новую фиксацию поверх A. Вы можете обойти это с помощью флага --allow-empty и просто сделать git commit --allow-empty, и вы получите пустую фиксацию поверх A, но фиксация будет отличаться (поскольку родительский, время и т. Д. Разные).

Зачем вы хотите это сделать?

+2

Что такое опция «-allow-empty»? –

+0

Я стою исправлены. Благодарю. Я отредактирую свой ответ. –

1

Исправьте меня, если я ошибаюсь, но я звучу так, как будто вы пытаетесь внести изменения в свою последнюю фиксацию? например внести некоторые корректирующие изменения в последнюю фиксацию и вытолкнуть ее заново.

Вы можете сделать это с помощью флага --amend, это обновит последнюю фиксацию на вашей текущей ветке. Затем вы можете вытолкнуть это исправленное сообщение, выполнив git push --force или git push --force-with-lease (представленный в git 1.8.5), чтобы убедиться, что вы не перезаписываете какие-либо изменения, которые вытеснили, когда вы вносите поправки в свое сообщение.

Необходим принудительный толчок, потому что, исправляя последнюю фиксацию, вы фактически заменяете ее все вместе, поэтому вам необходимо принудительно нажать, чтобы явно объявить, что вы хотите избавиться от предыдущего коммита.

пример:

git commit --amend -a 
git push --force-with-lease 
1

Если цель состоит в том, чтобы внести изменения в существующий совершить, прежде чем толкать,

  1. ли на необходимость полного изменения локально и снова зафиксировать изменения

  2. Это приведет к перечислению двух коммитов в вашем журнале git.

  3. Объедините эти две фиксации с одним фиксатором и нажмите.

Чтобы объединить два коммиты, выполните следующие действия:

Произнесите история

$ git log --pretty=oneline 
a931ac7c808e2471b22b5bd20f0cad046b1c5d0d c 
b76d157d507e819d7511132bdb5a80dd421d854f b 
df239176e1a2ffac927d8b496ea00d5488481db5 a 

То есть, был первый коммит, то Ь, и, наконец, с.

Запуск git rebase --interactive HEAD~2 дает редактор с

pick b76d157 b 
pick a931ac7 c 

# Rebase df23917..a931ac7 onto df23917 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
# 

Изменения выбора Б сквоша приведет к ошибке вы видели, но если вместо этого давит с в б, изменив текст

pick b76d157 b 
s a931ac7 c 
and save-quitting your editor, you'll get another editor whose contents are 

# This is a combination of 2 commits. 
# The first commit's message is: 

b 

# This is the 2nd commit message: 

c 
When you save and quit, the contents of the edited file become commit message of the new combined commit: 

$ git log --pretty=oneline 
18fd73d3ce748f2a58d1b566c03dd9dafe0b6b4f b and c 
df239176e1a2ffac927d8b496ea00d5488481db5 a 
0

Вы можете использовать git log, чтобы скопировать последнюю фиксацию.

git log --oneline -n 1 

Вы обычно работают git push origin <branch name>, чтобы подтолкнуть локальные изменения в удаленном хранилище.

+0

Это ничего не копирует. Он просто показывает вам вашу последнюю фиксацию. –

Смежные вопросы