如何放弃临时创建的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