2014-09-10 40 views
2

我在我的仓库中有一个分支,它提供了一个关于新变更的新提交(说'Commit A')。 而且我没有将提交尚未推送到远程存储库。现在'git reset'+'git push'会将我分离的提交发送到远程存储库吗?

,一个固定从此却下落不明承诺,我想:

  • git reset HEAD~1(回到先前的确认A-1,放回在工作目录中的最后提交的变化)
  • 更改文件丢失的修复
  • git add .
  • git commit(比如'提交B'
  • git push

我的问题是关于主要的重置提交(一个)。

  • 它会留在独立的提交吗?或者它仍然在我的分支?
  • 这是否会以任何方式将'Commit A'推送到远程存储库?
  • 它会搅乱我的历史吗?或者git push只会将提交同​​步到分支中,而忽略分离的分支? (即“犯”

最后

  • 什么,如果不是我有“犯”已经推尝试做相同的操作顺序?

回答

1

它会停留在分离的提交吗?或者它仍然在我的分支?

如果你在detached HEAD mode,那么任何重置仍然会在分离的HEAD中。
如果您不是在一个分离的头,然后git reset重置您的分支commitB,这意味着的HEAD:

- commitA要么在另一个分支(见“How to list branches that contain a given commit?”:混帐分支--contain commitA) - 或者在git reflog

时间将在推动“犯”到远程存储库以任何方式可见?

不,除非commitA是可访问的,另一个分支的一部分,如果你推动那个其他分支。

它会搅乱我的历史吗?

不是您当地的历史。只有在commitA已经被推送的情况下,它可能会混淆上游回购的历史。

在一个点上,你需要:

  • 无论是git的结帐aBranch
  • 或创建与您所在的分支(或重置)git的结帐-b aNewBranch。

您需要在分支中才能推送。

+0

是的,但我** **上午在一个分支。从我的分支我'git reset'和我的* HEAD *将仍然指向分支(即使它将指向它以前的任何一个提交)。唯一分离的东西是*'Commit A'*,因为它不在我的分支历史中(实际上我'回来'和'选择了另一条路径'(重置+提交) 但是*'detached'*不是描述提交状态的正确术语 – Kamafeather 2014-09-10 10:35:53

+0

@Kamafeather好的,我编辑了我的答案 – VonC 2014-09-10 11:51:51

+0

现在更清楚了,谢谢! – Kamafeather 2014-09-10 19:21:54

1

如果你不做git push,最终不会在远程仓库中出现。

Git重置默认为'混合'模式,因此您的命令将相当于'git reset --mixed HEAD〜1'。从git的文档,它说以下有关混合模式复位:

Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated. This is the default action. 

还可以,而不是重新设置,修改您提交使用“git的承诺--amend”命令。这将修改您最近一次提交的更改,并希望添加更改。

+0

它不回答我关于重置提交的detached/limbo *状态的问题。我知道,如果我不推动,我不会影响远程存储库,但+1指向“git修改”;我没有考虑到它 – Kamafeather 2014-09-10 10:45:16

+0

@Kamafeather提交之后创建的提交提交你重置的内容不会被删除,它们将退出但是会成为孤儿,可以使用'git fsck --lost-found'命令找到它,这是你想知道的吗? – markovuksanovic 2014-09-10 10:55:01

+0

是的,就是这样。确保本地重置不会保留重置公司同样也是远程的。谢谢 – Kamafeather 2014-09-10 19:19:34

1

关于重置提交(A)。

它会留下来作为分离提交吗?或者它仍然在我的 分支?

它将呆在身边沾边提交(从你的分支不可达),你可以通过做

git reflog 

该命令将列出所有的历史记录达到它由HEAD指出,在这种情况下的提交你会看到这样的事情:

af35532 [email protected]{0}: commit: Commit B 
bae2395 [email protected]{1}: reset: moving to HEAD~ 
6685f32 [email protected]{2}: commit: Commit A 

所以,您可以将您的分支恢复到以前的状态(指着犯了),这样一来:

git reset [email protected]{2} 

这会以任何方式将'Commit A'推送到远程存储库吗?

NO,因为推只发送头(又名分支机构)和只有从这些头

由于犯了是不是从你的分支可达提交reachables,它永远不会被发送。请注意,如果有另一个不同的分支使提交A可达,则提交A将与该分支一起发送

它会不会搅乱我的历史?或者git push会将提交同​​步到 分支,忽略分离的分支?(即“提交A”)

不,它不会乱你的历史,混帐推不会同步分离的承诺

什么,如果不是我有“犯”已经推尝试做同样的 操作序列?

在这种情况下,你推将被拒绝“非快进”,因为你试图覆盖远程头divegent历史

To https://github.com/user/repo.git 
! [rejected]  master -> master (non-fast-forward) 
相关问题