GitHub 桌面分支和合并问题
GitHub desktop branching and merging issues
我希望有人能帮助我。我目前正在学习 Git 命令,但目前我使用的是 GitHub 的桌面版。我正在 运行 研究分支和合并的一些问题,想知道任何人都可以对我遇到的问题提供一些见解。
当我分支并使用各种提交和提交消息进行大量修改时,我希望在将其合并回 master
时能够在分支中保留提交历史记录。在我合并的那一刻,master
将在其历史记录中有提交(我也想要)但是分支会丢失所有提交历史记录。
我对使用 PowerShell 的 Git 命令非常满意,所以如果可以用 Git 命令解决我的任何问题,我会很乐意尝试。
以下是合并前您的历史记录可能的示例:
*--*--*--*--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
您可能正在寻找 git rebase
当你变基时,git 本质上是想象你从主分支(例如 master)分支出来的时间比实际晚。它使 master 保持最新状态,然后自动将您分支的更改应用到此版本。
如果您一直在处理的文件在分支后也发生了变化,则可能会发生冲突,但变基过程允许您检查两组更改并选择正确的。
当您推送这些更改时,您将重写历史,因此您需要 git push --force
。请小心 - 此命令可能很危险,因为它可能会毫不费力地覆盖您同事的代码等。
我希望有人能帮助我。我目前正在学习 Git 命令,但目前我使用的是 GitHub 的桌面版。我正在 运行 研究分支和合并的一些问题,想知道任何人都可以对我遇到的问题提供一些见解。
当我分支并使用各种提交和提交消息进行大量修改时,我希望在将其合并回 master
时能够在分支中保留提交历史记录。在我合并的那一刻,master
将在其历史记录中有提交(我也想要)但是分支会丢失所有提交历史记录。
我对使用 PowerShell 的 Git 命令非常满意,所以如果可以用 Git 命令解决我的任何问题,我会很乐意尝试。
以下是合并前您的历史记录可能的示例:
*--*--*--*--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
您可能正在寻找 git rebase
当你变基时,git 本质上是想象你从主分支(例如 master)分支出来的时间比实际晚。它使 master 保持最新状态,然后自动将您分支的更改应用到此版本。
如果您一直在处理的文件在分支后也发生了变化,则可能会发生冲突,但变基过程允许您检查两组更改并选择正确的。
当您推送这些更改时,您将重写历史,因此您需要 git push --force
。请小心 - 此命令可能很危险,因为它可能会毫不费力地覆盖您同事的代码等。