git add
的理解是你基本上对你当地的git repo说“是的,我确定我想做出这些改变。”
git commit
的理解实际上是将更改保存到本地HEAD分支。此时它们实际上处于版本控制之中,但仅适用于您的git实例。
git push
的理解是将您保存的(已提交的)更改传播到主存储库,因此其他开发人员(或者可能是CI版本)可以自行解决这些问题。< / p>
如果我到目前为止所说的任何内容都是错误的或有误导性的,请先纠正我。假设我的理解是正确的,我最初在我的Java项目中有一个看起来像这样的包:
com.myapp.server.servlets
FizzServlet
BuzzServlet
然后我决定重构名称和一些东西,以及添加&amp;删除一些新文件/包:
com.myapp.server.servlet
FizzesServlet
WidgetServlet
com.myapp.server.servlet.impl
FizzesServletImpl
WidgetServletImpl
总的来说,我对此目录进行了5次更改:
com.myapp.server.servlets
”更改为“com.myapp.server.servlet
”FizzServlet
”更改为“FizzesServlet
”BuzzServlet
WidgetServlet
com.myapp.server.servlet.impl
包我是否必须在这里做任何特殊的命令魔法,因为我做了很多重构,或者我可以运行像git push *
这样的东西将所有东西都推送到GitHub?在SVN Eclipse插件中,如果我重命名了一个包或源文件,然后尝试提交该更改,我会经常丢失该文件(本地)并且必须从本地历史记录中恢复。即使在那时,我也被烧得太多次,无法计算并失去了很多工作。我希望不要与Git获得相同的经验。
答案 0 :(得分:2)
从推动你非常小心的方式来看,你对git push
的理解并不完全。 push
只会将您的提交推送到您的遥控器 - 这意味着,它将复制您在上次推送后提交的提交中保存的确切状态。在Git中,每个提交都是存储库中所有文件的快照(它实际上记录了所有文件,而不仅仅是更改)。因此,您在提交后在本地看到的内容将是推送时复制到遥控器上的内容。
当你推动时,可能会发生以下两种情况之一:
git reset
用于此)或从远程获取和(b)合并您的本地更改,从而创建合并提交将指示您的历史的分歧和重新收敛,或者(c)重新定位到遥控器上,以产生线性历史。冲突解决案例需要进一步研究,但所需的操作在Pro Git书中有详细描述(章节分支,合并,重新定位)。
只有当其他人可以推送到您的遥控器,或者您从另一台计算机推送到您的遥控器时,才会发生冲突。如果您在单用户单机计算机场景中工作(至少目前为止),推送时不会发生冲突。