GitHub桌面分支和合并问题

时间:2016-10-10 15:57:53

标签: git github-for-windows

我希望有人可以帮助我。我目前正在学习Git命令,但目前我使用的是GitHub的桌面版。我遇到了分支和合并的一些问题,并且想知道任何人都可以对我遇到的问题提供一些见解。

当我使用各种提交分支并执行大型修改并提交消息时,我希望能够在将其合并回master时保留分支中的提交历史记录。在我合并时,master将在其历史记录中提交(我也想要),但分支会丢失所有提交历史记录。

我对使用PowerShell的Git命令非常熟悉,所以如果能用Git命令解决我的任何问题,我会很乐意尝试。

2 个答案:

答案 0 :(得分:1)

以下是合并前您的历史可能情况的示例:

*--*--*--*--A [master]
             \
              *--*--*--* [myfeature]

请注意master没有myfeature没有的提交。 (mastermyfeature已分支,提交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。请注意 - 此命令可能很危险,因为它可能会毫不费力地覆盖您的同事的代码等。

更多信息:https://git-scm.com/book/en/v2/Git-Branching-Rebasing