2017-09-25 81 views
2

我有一个问题。我有2个分支,分别是mastermy-destinations。我对my-destinations分支进行了一些更改,这些分支不在master上。我承诺并将更改推送到my-destinations分支的git repo上。了解分支与Git和Github

当切换回掌握我提交并被推到回购不存在的变化,这是我的预期。但是,当我切换回master并运行git status时,它表示master是最新的。我本来以为它会说masterorigin后面的一个提交。

有人可以帮助我了解为什么master是最新与origin/master,但没有提交的修改?

+1

您从未将更改合并到'master'中,为什么它会落后?你需要'git checkout master && git merge my-destinations'来改变'master' – CoryKramer

+0

当我尝试git merge git响应“not something we merge”时,这个响应指的是什么? – meddy

+0

https://stackoverflow.com/questions/16862933/how-to-resolve-gits-not-something-we-can-merge-error – CoryKramer

回答

1

有人可以帮助我理解为什么主人是最新的起源/主,但没有承诺的变化?

您的local master分支与github remote master分支具有相同的文件。这就是您的(本地)主分支不在您的(远程)主分支后面的原因。

你的(本地)主分支将是背后是否有其他人(或者你从任何其他远程计算机)已经COMMITED新的修改(远程)主分支(提交的任何金额)。

1

您添加提交到my-destinations,在你的本地回购,不master

a    <-- master ref is (a) 
\ 
    b - c - d <-- my-destinations ref is (d) 

当你推到origin,远程回购,它只是把你现有的本地master分行,并提出了远程回购master是一样的。换句话说,远程master更新为参考(a),就像您的本地master一样。如果它已经在(a),那么对遥控器完全没有改变。

您的遥控器命名为origin,这是标准的命名约定。所以,如果你添加本地跟踪分行远程master,它会被称为origin/master,它会引用发生该分支推后的相同承诺:

a   <-- master (a)* <-- origin/master (a) 
\ 
    b - c - d <-- my-destinations (d) 

(*) - Indicates branch that is checked out 

需要注意的是,如果你没有推而my-destinations被检出,然后origin不会有新的提交b,c和d,除非使用命令行标志或其他方法将所有分支推送到origin。如果您确实推送了my-destinations,那么在遥控器上也会有b-c-d提交,并且还会指向(d)的本地跟踪参考。

但最大的问题是如何让你的新提交回master。为了从my-destinations让您的新提交到master,你可以git merge my-destinations与主签出,其中,在这种情况下,将只是“快进”大师达(d)提交,因为master被引用的my-destinations父(即他们没有分歧 - 你可以认为abcd是一条直线而不是一条分支)。合并之后,你会:

a   <-- origin/master (a) 
\ 
    b - c - d <-- master (d)* <-- my-destinations (d) 

然后,推到远程之后,origin/master将更新以便它匹配master在提交(d) - 即所有三个裁判将被指向(d)。


注:如果mastermy-destinations分歧,你可以合并或重订,使他们重新走到一起。在Google中查找“visual git教程”,你应该运行几个很好的教程来指导你完成这些教程。

另请参见:我推荐Git Extensions作为一个开源GUI工具,它将帮助您更准确地了解您的分支机构,提交本地和远程操作的GUI。它帮助我更轻松地学习Git,在Visual Studio或前台的其他工具中工作时,我总是在后台打开它。它会基本向您展示类似于上述图表的任何回复,您可以随时进行更改。