我希望有人可以帮助我。我目前正在学习Git命令,但目前我使用的是GitHub的桌面版。我遇到了分支和合并的一些问题,并且想知道任何人都可以对我遇到的问题提供一些见解。
当我使用各种提交分支并执行大型修改并提交消息时,我希望能够在将其合并回master
时保留分支中的提交历史记录。在我合并时,master
将在其历史记录中提交(我也想要),但分支会丢失所有提交历史记录。
我对使用PowerShell的Git命令非常熟悉,所以如果能用Git命令解决我的任何问题,我会很乐意尝试。
答案 0 :(得分:1)
以下是合并前您的历史可能情况的示例:
*--*--*--*--A [master]
\
*--*--*--* [myfeature]
请注意master
没有myfeature
没有的提交。 (master
在myfeature
已分支,提交A
之后没有添加任何提交。)因此,默认情况下Git会执行快进合并,这会导致像这样的历史:
*--*--*--*--A--*--*--*--* [master,myfeature]
(作为mentioned by @tkausl,历史记录不会被转移,只会修改master
。除非您之后将其删除,否则myfeature
不应更改。)
我的假设是你希望你的历史看起来更像这样:
*--*--*--*--A------------* [master]
\ /
*--*--*--* [myfeature]
要做到这一点,你必须像这样进行合并:
git checkout master
git merge --no-ff myfeature
如果要撤消快进合并并将其重做为--no-ff
,请执行以下操作:
git checkout master
git reset --hard A
git merge --no-ff myfeature
要找出A
的提交哈希,并确保发生这种情况,请检查输出:
git log --all --oneline --decorate --graph
答案 1 :(得分:1)
您可能正在寻找function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
s.getName() == "UpdateTriggerSheet"
r.getrow() == 2
if(isBlank() == False) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("addBook");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
}
}
当你改变时,git基本上想象你比你实际做的那样从主分支(例如主分支)分支出来。它使master成为最新版本,然后自动将您的分支更改应用于此版本。
如果你所处理的文件在你分支后也发生了变化,可能会发生冲突,但是rebase过程允许你检查这两组变化并选择正确的变化。
当您推送这些更改时,您将重写历史记录,因此您需要git rebase
。请注意 - 此命令可能很危险,因为它可能会毫不费力地覆盖您的同事的代码等。