如何放弃临时创建的git分支
从一个干净的克隆开始 我想创建一个临时分支如何放弃临时创建的git分支,git,branch,branching-and-merging,Git,Branch,Branching And Merging,从一个干净的克隆开始 我想创建一个临时分支 ➜ IKnowKungFu git:(master) git checkout -b submodule_nightmare Switched to a new branch 'submodule_nightmare' 做了一些改变 ➜ IKnowKungFu git:(submodule_nightmare) ✗ git status On branch submodule_nightmare Changes to be committed:
➜ IKnowKungFu git:(master) git checkout -b submodule_nightmare
Switched to a new branch 'submodule_nightmare'
做了一些改变
➜ IKnowKungFu git:(submodule_nightmare) ✗ git status
On branch submodule_nightmare
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitmodules
deleted: Carthage/Checkouts/Nimble
deleted: Carthage/Checkouts/Quick
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .gitignore
modified: bin/setup
这似乎完全删除了分支,但当我尝试“从头开始重新创建它”时,git似乎仍然记得我所做的更改:
➜ IKnowKungFu git:(master) ✗ git checkout -b submodule_nightmare
M .gitignore
M .gitmodules
D Carthage/Checkouts/Nimble
D Carthage/Checkouts/Quick
M bin/setup
Switched to a new branch 'submodule_nightmare'
➜ IKnowKungFu git:(submodule_nightmare) ✗ git diff
➜ IKnowKungFu git:(submodule_nightmare) ✗ git status
On branch submodule_nightmare
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitmodules
deleted: Carthage/Checkouts/Nimble
deleted: Carthage/Checkouts/Quick
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .gitignore
modified: bin/setup
➜ 我知道功夫吉特:(大师)✗ git签出-b子模块
M.gitignore
M.git模块
D迦太基/退房/灵活
D迦太基/退房/快速
M bin/设置
切换到新的分支“子模块\u”
➜ IKnowKungFu git:(子模块_噩梦)✗ 差异比较
➜ IKnowKungFu git:(子模块_噩梦)✗ git状态
关于分支子模
要提交的更改:
(使用“git重置磁头…”取消分级)
修改:.git模块
删除:迦太基/退房/灵活
删除:迦太基/退房/快速
未为提交而暂存的更改:
(使用“git add…”更新将提交的内容)
(使用“git签出--…”放弃工作目录中的更改)
修改:.gitignore
修改:bin/setup
为什么会这样
p、 如果你想知道分支机构的名称,git/Carthage最近给了我 已正确删除分支,但未触及对工作目录的更改。当您签回主模块或重新创建子模块\u噩梦分支时,在子模块\u噩梦分支中所做的更改实际上不会恢复/撤消 发生这种情况是因为上的两个分支是相同的提交,因此在切换分支时,工作目录中没有可更改的文件。例如,这是一项功能,它允许您在master上进行一些更改,决定应在其他分支上完成工作,然后使用
git checkout-b newcode
更改到该分支,而无需以任何方式保存更改
为了恢复对工作目录的跟踪文件所做的所有更改,需要运行破坏性命令,如git reset--hard
(这将撤消您的工作,因此请小心)。可以使用git clean的一些参数清除未跟踪的文件(也具有破坏性,请小心使用)
如果在两个分支之间切换的是不同的提交,并且对两个分支之间不同的文件进行了更改,那么如果在不告诉Git该做什么的情况下尝试切换分支,则会导致错误。这是因为Git避免破坏您的工作,除非您告诉它,所以它会中止,直到您告诉它如何处理更改的文件
举个例子,假设更新的Cartfile被提交到master中,但是现有的分支submodule_dream没有这个提交。然后对master中的Cartfile进行了一些更改,但没有提交。如果您尝试使用git checkout submodule\u monamine
将分支切换到子模块\u monamine,则会看到以下错误:
error: Your local changes to the following files would be overwritten by checkout:
Cartfile
Please, commit your changes or stash them before you can switch branches.
Aborting
Git清楚地告诉您需要以某种方式保存更改(提交或隐藏),或撤消更改(例如,
Git checkout master Cartfile
或手动编辑),然后才能允许您切换 git status
命令在其输出中列出了所需的命令。尝试git reset HEAD.
取消保存更改以提交。然后运行git checkout--.
放弃工作目录中的更改。@Cobster我没有提交的更改。所做的只是更改到一个新分支,修改一些文件,然后(不提交)决定转储整个分支以“删除”它。这是我尝试的流程,但没有成功。我的问题是,如果它不是git的常规流程,那么创建一个临时分支然后删除它的最佳实践是什么?列出的输出显示您有以下3个提交阶段的更改:.gitmodules
,删除迦太基/checkout/Nimble
,以及删除迦太基/checkout/Quick
。此外,您的工作目录.gitignore
中有2处更改,并且bin/setup
中有一些文件。上一条注释中的命令将对此进行清理。在我正常的git工作流中,我会将所有这些更改提交到临时分支,然后删除该分支,这样就不会将更改推送到远程存储库。@Cobster很抱歉,这里所指的“提交的暂存”是指git跟踪并已修改的文件吗?如果是的话,我确实做了一些更改,现在正在寻找放弃它们的最佳方法。这些修改将包含在下一次提交中。如果您熟悉TFS,这有点像“包含的更改”。您创建的分支本身不会保持分段和/或工作更改的这种状态。因此,当分支被删除时,您所做的更改仍然存在。很有趣,谢谢您的深刻解释。如果我理解正确的话,如果我在子模块上提交了我的更改,然后继续删除分支,它会工作吗?我的最终目标是找到一个轻松的工作流程,在一边做一些更改,如果我不喜欢结果,就放弃分支。是的,这会奏效,但轻松的工作流程很可能是以下三个命令:git reset--hard
git checkout master
git branch-D子模块
。第一个删除所有更改,第二个将您放回master,第三个删除分支。如果还有剩余的未跟踪文件,git clean-f
应该清除.git文件中没有的任何内容。如果您需要删除目录,请添加一个-d
,而mangitclean
可以帮助您解决任何更棘手的问题。对我来说,承诺似乎比重新设定更重要。
➜ IKnowKungFu git:(master) ✗ git checkout -b submodule_nightmare
M .gitignore
M .gitmodules
D Carthage/Checkouts/Nimble
D Carthage/Checkouts/Quick
M bin/setup
Switched to a new branch 'submodule_nightmare'
➜ IKnowKungFu git:(submodule_nightmare) ✗ git diff
➜ IKnowKungFu git:(submodule_nightmare) ✗ git status
On branch submodule_nightmare
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitmodules
deleted: Carthage/Checkouts/Nimble
deleted: Carthage/Checkouts/Quick
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .gitignore
modified: bin/setup
error: Your local changes to the following files would be overwritten by checkout:
Cartfile
Please, commit your changes or stash them before you can switch branches.
Aborting