其他

Git 本地仓库和远程仓库的关系

1. 本地仓库和远程仓库的关系


  • 本地仓库
    • 存储在你本地电脑上的 Git 仓库,包含项目的版本历史和你的当前开发工作。
    • 开发者在本地进行修改、提交、分支管理等操作。
    • 提交不会自动同步到远程仓库,必须手动推送(push)。
  • 远程仓库
    • 通常托管在服务器上(如 GitHub、GitLab、Bitbucket),供团队成员共享。
    • 只有通过**推送(push)拉取(pull)**操作,远程仓库和本地仓库之间才会同步提交。

2. 提交(commit)在本地和远程的区别


本地提交

  • 每次运行 git commit,提交记录只保存在本地仓库中。
  • 这些提交需要通过 git push 命令推送到远程仓库,才能让其他人看到。

远程提交

  • 远程仓库的提交记录来自其他开发者的推送或你的本地推送。
  • 如果你想获取远程的新提交记录,需运行 git pullgit fetch 命令。

3. 提交同步的流程


  • 本地提交到远程:
git add <file>
git commit -m "本地的提交记录"
git push origin <branch>

上述步骤会将你的本地提交记录推送到远程仓库的对应分支。

  • 远程同步到本地
git pull origin <branch>

拉取(pull)操作将远程提交记录合并到你的本地仓库。

4. 本地和远程提交的对比


通过以下命令查看本地和远程提交是否同步:

  • 查看远程提交日志
git log origin/<branch>

显示远程仓库的提交记录。

  • 比较本地和远程提交
git log HEAD..origin/<branch> # 查看远程有但本地没有的提交
git log origin/<branch>..HEAD # 查看本地有但远程没有的提交

5. 场景解析


本地有提交,远程没有

  • 说明你本地代码已提交,但没有执行 git push
  • 解决方法:执行 git push,同步本地提交到远程。

远程有提交,本地没有

  • 说明其他开发者推送了新提交,而你没有拉取更新。
  • 解决方法:执行 git pullgit fetch 同步远程的提交记录。

本地和远程提交冲突

  • 如果你和其他开发者对同一文件的相同部分做了修改,就会导致冲突。
  • 解决方法:在拉取远程提交时,Git 会提示冲突,需要手动解决后再提交合并结果。

6.Git在终端以可视化的方式查看提交情况


要使用 Git 查看树状提交情况,可以使用git log命令的–graph 选项。这个选项会以树状图的形式显示提交历史,清晰地展示每个提交的分支合并情况和分支间的关系

git log --graph

7.gitkgit-gui


在安装 Git 的同时,你也装好了它提供的可视化工具,gitkgit-gui

gitk 是一个历史记录的图形化查看器。 你可以把它当作是基于 git loggit grep 命令的一个强大的图形操作界面。 当你需要查找过去发生的某次记录,或是可视化查看项目历史的时候,你将会用到这个工具。

使用 Gitk 的最简单方法就是从命令行打开。 只需 cd 到一个 Git 仓库,然后键入:

$ gitk 

这张图看起来就和执行 git log --graph 命令的输出差不多;每个点代表一次提交,线代表父子关系,而彩色的方块则用来标示一个个引用。 黄点表示 HEAD,红点表示尚未提交的本地变动。 下方的窗口用来显示当前选中的提交的具体信息;评论和补丁显示在左侧,摘要显示在右侧。 中间则是一组用来搜索历史的控件。

与之相比,git-gui 则主要是一个用来制作提交的工具。 打开它的最简单方法也是从命令行启动:

$ git gui

它的界面长这个样子:

左侧是索引区,未暂存的修改显示在上方,已暂存的修改显示在下方。 你可以通过点击文件名左侧的图标来将该文件在暂存状态与未暂存状态之间切换,你也可以通过选中一个文件名来查看它的详情。

右侧窗口的上方以 diff 格式来显示当前选中文件发生了变动的地方。 你可以通过右击某一区块或行从而将这一区块或行放入暂存区。

右侧窗口的下方是写日志和执行操作的地方。 在文本框中键入日志然后点击“提交”就和执行 git commit 的效果差不多。 如果你想要修订上一次提交, 可以选中“修订”按钮,上次一提交的内容就会显示在“暂存区”。 然后你就可以简单的对修改进行暂存和取消暂存操作,更新提交日志,然后再次点击“提交”用这个新的提交来覆盖上一次提交。

gitkgit-gui 就是针对某种任务设计的工具的两个例子。 它们分别为了不同的目的(即查看历史和制作提交)而进行了精简,略去了用不到的功能。

总结


  • 本地仓库和远程仓库各自独立保存提交记录。
  • 提交不会自动同步,必须通过 git pushgit pull 操作。
  • 对于团队协作,及时同步提交记录(推送和拉取)非常重要,确保所有开发者都在同一个版本基础上工作。