java - Git:存在大量更改时添加、提交或推送的特殊操作?

标签 java git github

我对 git add理解是,您基本上是在对本地 git 存储库说“是的,我确定我想要进行这些更改。”

我对 git commit 的理解是将更改实际保存到本地 HEAD 分支。此时它们实际上处于版本控制中,但仅位于您的 git 实例本地。

我对 git Push 的理解是将您保存(提交)的更改传播到主存储库,以便其他开发人员(或者可能是 CI 构建)可以将它们 pull 下来为了他们自己。

如果我到目前为止所说的有任何错误或误导性的内容,请先纠正我。假设我的理解是正确的,我最初的 Java 项目中有一个如下所示的包:

com.myapp.server.servlets
    FizzServlet
    BuzzServlet

但后来我决定重构名称和一些内容,以及添加和删除一些新文件/包:

com.myapp.server.servlet
    FizzesServlet
    WidgetServlet
    com.myapp.server.servlet.impl
        FizzesServletImpl
        WidgetServletImpl

总的来说,我对该目录进行了 5 处更改:

  1. 将名称从“com.myapp.server.servlets”更改为“com.myapp.server.servlet
  2. 将名称从“FizzServlet”更改为“FizzesServlet
  3. 完全删除了 BuzzServlet
  4. 添加了新的 WidgetServlet
  5. 添加了一个新的 com.myapp.server.servlet.impl 包,其中包含两个子文件

我是否必须在这里执行任何特殊的命令魔法,因为我进行了如此多的重构,或者我可以只运行诸如 git Push * 之类的东西来将所有内容推送到 GitHub 吗?在 SVN Eclipse 插件中,如果我重命名了一个包或源文件,然后尝试提交该更改,我通常会完全(本地)丢失该文件,并且必须从本地历史记录中恢复。即便如此,我还是被烧伤了无数次,并且失去了很多工作。我希望在使用 Git 时不会有同样的经历。

最佳答案

从你对推送非常小心的方式来看,你对git push的理解还不太完整。 push 实际上只会将您的提交推送到远程 - 这意味着,它将复制您自上次推送以来在提交中保存的确切状态。在 Git 中,每次提交都是存储库中所有文件的快照(实际上它确实记录了所有文件,而不仅仅是更改)。因此,提交后您在本地看到的内容将与推送时复制到远程的内容完全相同。

当您按下时,可能会发生以下两种情况之一:

  1. 推送成功,在这种情况下一切都很好,远程的状态反射(reflect)了本地存储库的状态(为了强调这一点,请记住 git 提交是通过其 SHA 哈希来标识的——如果提交不同,那么哈希值是吗?
  2. 推送被拒绝,因为它没有快进。当自您上次 pull/取以来其他人已将提交推送到您的远程时,就会发生这种情况,这相当于尝试在 SVN 中提交时出现令人讨厌且经常令人担心的冲突。但是,您本地的州不受此影响。您必须解决冲突(a)删除您的提交并接受远程状态(为此使用git重置)或通过从远程获取和(b) merge 您的本地更改,从而创建一个 merge 提交,该提交将指示您的历史记录的分歧和重新收敛,或者(c)重新定位到远程,以生成线性历史记录。

冲突解决案例需要更多的研究,但所需的操作在 Pro Git 书中有详细描述(章节分支、 merge 、 rebase )。

仅当其他人可以推送到您的远程设备,或者您从另一台计算机推送到您的远程设备时,才会发生冲突。如果你工作在单用户单机场景(至少目前),推送时不会有冲突。

关于java - Git:存在大量更改时添加、提交或推送的特殊操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14713730/

相关文章:

Java system.out.println 控制台

git - 撤消 git 过滤器分支

Windows 特定的 Git 配置设置;他们在哪里设置?

java - JPA 延迟加载和泛型

java - "throw this"在回溯中产生奇怪的行

php - Composer 不会使用我的 fork

python - 如何将文件的所有 git 版本保存到磁盘?

git - 如何克隆私有(private) GitLab 存储库?

github - 有没有一种方法可以将GitHub webhooks分为: master, pull-request和其他三个类别?

Java返回到调用栈中的位置N