【发布时间】:2015-05-04 11:35:35
【问题描述】:
当我知道一个分支已被 rebase -i '清理',我发现自己在做:
git fetch
git checkout master
git branch -D tracking-branch
git checkout -t origin/tracking branch
某些 git 命令是否包含此选项?请注意,当我需要在多个系统上进行测试时,这会出现我完全私有的任务分支。
【问题讨论】:
标签: git
当我知道一个分支已被 rebase -i '清理',我发现自己在做:
git fetch
git checkout master
git branch -D tracking-branch
git checkout -t origin/tracking branch
某些 git 命令是否包含此选项?请注意,当我需要在多个系统上进行测试时,这会出现我完全私有的任务分支。
【问题讨论】:
标签: git
您可以简单地硬重置远程分支并保留您的工作目录,而不是删除本地分支:
git fetch
git checkout tracking-branch
git reset --keep origin/tracking
如果您完全确定应该丢弃本地更改,请执行
git reset --hard origin/tracking
【讨论】:
HEAD, the index and the working copy are modified with this approach 这个方法的 cons 列中的点不是吗?...
如果您的跟踪分支已经在跟踪其远程分支,
以下命令应该可以解决问题:
git fetch
git branch -f tracking-branch origin/tracking
这样:
git reset --hard,这可能会删除工作树中正在进行的一些工作。git checkout 和git reset --hard 中涉及的昂贵的磁盘I/O【讨论】:
如果您确定要丢弃本地历史记录,请查看有关 git reset 和 git branch -f 的其他答案。
如果您不能 100% 确定自己没有重要的本地更改(或者当您确实知道自己有不想丢弃的重要本地提交时),那么另一种方法可能会更安全使用git rebase:
git checkout tracking-branch
git pull --rebase
当要应用的补丁与上游提交引入的补丁相同时,Git 会自动通知上游已经应用了哪些补丁。当某些补丁被重写时,您可能会遇到一些冲突,但是您可以手动检查该补丁是否真的要跳过,并使用git rebase --skip手动跳过它。
【讨论】:
使用git reset --hard origin/tracking 强制跟踪分支的状态可以达到目的,而无需删除并重新创建本地分支。
【讨论】: