git - ReinH Git 工作流

标签 git

我正在使用这个工作流程:

http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html

他提到:“首先,在您的 master 分支 (git checkout master) 中,引入最新的更改: git pull origin master 这永远不应该创建 merge 提交,因为我们永远不会直接在 master 中工作。”

哎呀,我刚刚做到了。我不小心将几个文件的一些更改提交给了我的主人(相对于我的主题分支)。然后我意识到我的错误 - 删除了我的主题分支。现在我想摆脱我提交的更改(对主人),正确的做法是什么?我还没有 rebase 或将我的更改推送到 repo,所以它都是本地的。

本质上,我想 pull 最新版本的 master 代码,而忽略我对本地 master 所做的一切(这实际上是一次提交)。

最佳答案

如果你只是想把它扔掉,而你在你的主分支上:

git reset --hard HEAD^

此命令会将您主控的 HEAD 指针重置为上一次提交。 (您也可以说“HEAD~1”,这与 HEAD^ 的含义相同。)更一般地说,您还可以将您的 master 重置为与服务器的相同:

git reset --hard origin/master

无论 master 的状态如何(即在 origin 之前 5 次提交,或在它之后 30 次提交),这都会起作用。这些命令中的 --hard 选项意味着您的工作树中的文件也将与分支头一起重置。

额外提示

如果您处于类似的情况,您实际上想要保留您的更改,您总是可以这样做:

git fetch             # This grabs changes from the server without merging them
git rebase origin

这将在服务器上的最新更改之上重播您在 master 中的所有工作。

另一种选择是为您在 master 上的工作创建一个主题分支:

git checkout -b newfeature

然后您可以切换回 master (git checkout master) 并使用我给出的第一个命令将 master 倒回一次提交。请记住,分支实际上只是存储库中提交的方便名称。例如,master 只是对该分支上最新提交的引用。您可以随意移动这些引用,并且随着您对 git 的掌握程度越来越高,您会发现自己经常这样做。

我还建议您养成在使用分支时运行 gitk --all 的习惯,这样您就可以直观地看到您在做什么。当我刚接触 git 时,我总是运行这个命令。我还是……

关于git - ReinH Git 工作流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855266/

相关文章:

ruby - Git Tree 和 Commit 对象的校验和计算

git 显示我删除了我的 repo 中的所有文件,并在我执行 git pull 后暂存它们以供提交。为什么?

git - git 中的文件索引已在 Git 中删除

git - 从 powershell 启动非阻塞进程

git - 在具有共享用户的公共(public)服务器上使用 git 私钥的最佳实践

git - repo 同步错误 : . repo / list /:包含未提交的更改

git - Hg 是否有相当于 git Revert/cherry-pick 的功能?

android - 进程 'command ' git'完成,退出值非零1

git - 术语 "HEAD"、 "head"和 "tip"有何不同?

git - 如何让 Team City 仅在 Github pull 请求包含特定文件夹中的更改时触发构建