2016-04-18 115 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