使用git时,在开始处理功能或问题之前,我会按照以下步骤进行操作
git checkout master // make sure you are on local master
git fetch origin // get latest commits from remote
git merge origin/master // merge latest commits from remote into local master
git checkout -b new-branch // create new branch from up-to-date remote master
但是,我正在阅读Atlassian的功能分支工作流程教程,他们建议您进行以下操作
git checkout master
git fetch origin
git reset --hard origin/master
git checkout -b new-branch
很显然,除了第3步,我们遵循相同的步骤。但是作为新的git用户,即使在我阅读了它的解释之后,我还是对第3步感到困惑。
我和他们的步骤3有什么不同? 哪个以及为什么更好?
答案 0 :(得分:1)
简短地:
- git merge 一次将分支A的所有唯一提交应用于分支B 提交最终结果
- git merge 不重写提交 历史记录,只添加了一个新的提交
- git rebase 从两个分支获取所有唯一的提交,并将它们一次一一地应用
- git rebase 重写提交历史记录,但不创建用于合并的额外提交
答案 1 :(得分:1)
您的问题有点错!
git reset --hard origin/master
不会重新设置基准,它是hard reset;另请参见Reset Demystified。
在您的情况下,这意味着“删除当前分支中的所有本地更改,并将分支指针移至origin/master
”。它的优点是命令完全将本地分支与远程同步;缺点是,它会删除您的本地提交和未提交的更改(如果有的话)。
答案 2 :(得分:1)
您显示的示例来自Atlassian的Git Feature Branch Workflow
在正常情况下,提取后,git merge origin/master
和git reset --hard origin/master
之间没有区别。
但是,reset --hard
具有破坏性,我会避免常规执行。如果您在错误的分支或不同的时刻偶然执行了merge
,则可以撤消。
顺便说一句,您只需
git checkout master
git pull
git checkout -b feature_branch