Вы можете использовать git merge --squash
для этого, что немного более элегантно, чем git rebase -i
. Предположим, что вы на хозяине, и вы хотите раздавить последние 12 коммитов в одном.
ВНИМАНИЕ: сначала убедитесь, что вы совершили проверку работоспособности, что git status
чиста (поскольку git reset --hard
выбрасывает поэтапные и неустановленные изменения)
Затем:
# Reset the current branch to the commit just before the last 12:
git reset --hard HEAD~12
# HEAD@{1} is where the branch was just before the previous command.
# This command sets the state of the index to be as it would just
# after a merge from that commit:
git merge --squash HEAD@{1}
# Commit those squashed changes. The commit message will be helpfully
# prepopulated with the commit messages of all the squashed commits:
git commit
Документация для git merge
более подробно описывает параметр --squash
.
Обновление: единственное реальное преимущество этого метода по сравнению с более простым git reset --soft HEAD~12 && git commit
, предложенным Крисом Джонсеном в , его ответом является то, что вы получаете сообщение о фиксации preopulated с каждым сообщением фиксации, которое вы раздавите.
Если у вас нет контроля над фрейм-сайтом, вы не можете обойти междоменную политику.
Если у вас есть контроль над обоими сайтами, вы можете использовать postMessage
для передачи данных в разных доменах. Очень простой пример:
// framed.htm:
window.onmessage = function(event) {
event.source.postMessage(document.body.innerHTML, event.origin);
};
// Main page:
window.onmessage = function(event) {
alert(event.data);
};
// Trigger:
// <iframe id="myframe" src="framed.htm"></iframe>
document.getElementById('myframe').contentWindow.postMessage('','*');
В событии Internet Explorer 8, переданном как параметр, может быть null, поэтому вам нужно получить доступ к событию другим способом:
В файле frame.html:
window.onmessage = function(event) {
var evt = evt || window.event;
evt.source.postMessage('Message from iFrame', evt.origin);
};
На main.html:
window.onmessage = function(event) {
var evt = evt || window.event;
alert(evt.data);
};
Событие запускается так же, как и Rob W:
document.getElementById('frameId').contentWindow.postMessage('message','*');