2016-04-18 87 views
1

我的git莫名其妙地搞砸了。这个问题有两个阶段:创建新分支后git不推送到远程

1)我创建了一个名为perf_test的分支,进行了一些更改。我想保留新分支中的更改,但请回复主人以检查事情是如何发生的。在master上,我发现perf_test上的更改显示在master的git状态中。

> git checkout -b perf_test 
> touch /path/to/foo.txt 
> git status 
Uncommitted changes 
modified /path/to/foo.txt 
> git checkout master 
> git status 
Uncommitted changes 
modified /path/to/foo.txt 

我不明白为什么这些变化在切换到主控后显示在主控中。

2)然后,我毁掉了在perf_test所有的变化,还做出了在perf_test(一些其他的变化不是希望 - 我还以为是在主,但在perf_test - 但是这并不重要)

> git checkout perf_test 
> git rm /path/to/foo.txt 
> git status 
...clean... 
> touch /path/to/bar.txt 
> git commit -am "changed bar.txt" 
...committed... 
> git branch 
... 
*perf_test 
... 
> git checkout master 
> git push origin master 
Everything up-to-date 
> git push heroku master 
Everything up-to-date 

我希望对bar.txt的更改必须推到原点和heroku - 但是两者都报告说,当我知道它们不是(更改从未推到远程)时,它们是最新的。

我想将bar.txt更改为我的遥控器 - 如何操作?

回答

1
  1. 在你的命令的第一个列表,你从来没有承诺任何分支,所以你在git status输出中看到的是当前的区别提交(HEAD)和工作目录。当您使用git checkout切换分支时,git会尝试避免对工作目录中的未完成更改做任何事情。另外,由于您从master创建后perf_test没有提交任何内容,因此perf_test仍与master完全相同,因此在perf_test上看到相同的结果并不奇怪,因为在master上看到的结果并不奇怪。

  2. 我假设你输入了touch /path/to/bar.txt而不是git touch,但是确定。您对bar.txt进行了更改,并将该更改提交到perf_test分支,但之后您将master(未更新,并且未包含更新后的bar.txt)推送到origin和heroku。您是否想将本地分支perf_test推送到远程分支master?如果是这样,则语法是git push origin perf_test:master(并且类似地对于heroku)。

+0

了解它1.是的,它是触摸,而不是混帐触摸 - 将解决。这有帮助 - 我想要做的就是将更改从bar_txt从perf_test合并到master,然后提交master,并从master推送。如所描述的,我认为它工作。谢谢! – Anand

+0

好的,在这种情况下,你所缺少的就是'git checkout master'行之后的'git merge perf_test'。之后你不需要提交主文件,因为'git merge'命令会为你创建合并提交(除非存在合并冲突)。 – kini

+0

谢谢,这非常有用! – Anand