Git基础(Based on ProGit)

Git

Git的配置信息

使用git config命令对Git做一些配置。

Git的配置文件等级

Git的配置文件有三个,分别对应不同的影响等级:

  • Linux下

    • /etc/gitconfig:包含系统上每个用户及他们仓库的通用配置,使用git config --system更改

    • ~/.gitconfig~/.config/git/config:针对当前用户的配置文件,使用git config --global修改

    • .git/config:针对当前仓库的配置文件,使用git config修改

  • Windows下

    • $Git/etc/gitconfig
    • $HOME/.gitconfig
    • .git/config

读取配置时优先读取当前仓库的配置,如果没有就往上找

修改Git配置

  • 修改全局配置:git config --global user.name "zhangsan"

查看当前的Git配置

git config --list

Git基础

初始化Git仓库

将当前目录初始化为Git仓库:git init

如果当前目录中已经有一些文件存在,使用git add <filename>来跟踪某个文件即将其提交到暂存区,或者git add .跟踪当前目录所有文件并提交到暂存区

克隆已有的仓库

克隆github上某个仓库:git clone <url>

git commit -a提交所有已修改的文件,不管有没有在暂存区

从git中移除文件

git rm $FILENAME:要求文件当前没有被暂存,如果被暂存需要添加-f选项,这样强制删除后无法被Git恢复。也可以添加--chached选项直接从暂存区移除(不会从磁盘上移除),移除后是untracked状态

比较差异

文件已修改且未提交到暂存区,与修改前作对比:git diff <filename>

文件已提交到暂存区,与上次提交作对比:git diff --cached or git diff --staged

移动文件

git mv <src> <dst>

运行一次git mv命令相当于

  • mv <src> <dst>
  • git rm <src>
  • git add <dst>

查看提交历史

git log [option]

option

  • -p :显示每次提交的diff

  • -n:显示最近n次提交log

  • --oneline:只显示每次提交的SHA-1和提交信息

提交参数

git commit --amend:提交暂存区修改,并将上次提交与本次提交合并

取消暂存

git reset HEAD <filename>:撤销对某文件的暂存操作,变为已修改未暂存状态

恢复到上次提交的状态

git checkout -- <filename> or git restore <filename>:丢弃所有修改,将文件恢复到暂存区的状态(如果已暂存未提交),否则恢复到上次提交的状态

Git别名

git config --global alias.co checkout

git别名只是简单的文本替换

Git分支

​ Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方法。概念上来区分,其它大部分系统以文件变更列表的方式存储信息。 这类系统(CVS、Subversion、Perforce、Bazaar 等等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。

​ 每次提交更新,Git都会保存所有被跟踪文件的快照并将快照索引保存在本次提交创建的提交对象中,而不是记录本次修改与上次的差异。提交对象保存了快照索引、提交信息、父对象等信息。git init后会自动创建一个master分支,每次commit后会创建新的提交对象,master自动向前移动。

一个简单的提交历史。

​ 新建分支实质上是创建一个指向当前分支的最后一个提交对象的指针(Git通过一个HEAD指针记录当前所在的分支,并指向最后一次提交的快照,当切换分支时,HEAD指针也随之变动),由于 Git 的分支实质上仅是包含所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件,所以它的创建和销毁都异常高效。,创建一个新分支就相当于往一个文件中写入 41 个字节(40 个字符和 1 个换行符)

Git创建分支

git branch <branch_name>

下图展示了执行git branch testing创建testing分支的结果。

HEAD 指向当前所在的分支。

Git删除分支

git branch -d <branch_name>如果该分支没有被合并则删除失败,使用-D强制删除

Git切换分支

git checkout [option] <branch_name>

option

  • -b:创建分支后切换到该分支

Git合并分支

将两个分支合并会产生一个新的提交对象。

git merge <branch_name>:将brance name合并到当前分支,如果没有文件冲突发生,则合并完成;如果发生文件冲突,Git会提示合并未完成,使用git st命令查看未merge的文件并手动修改,未merge的文件分为上下两部分,用======分割,手动选择要保存的内容并删除>>>>>>>=======<<<<<<<<<<后执行git add <filename>git commit后自动完成合并

git branch --merged:查看已合并到当前分支的分支

git branch --no-merged:查看所有未合并工作的分支

如果要合并的分支与当前分支在一条大分支上,也就是当前分支落后于要合并的分支,那么只需要将当前分支的指针快进即可。

接下来将iss53分支合并到master分支上:

一次典型合并中所用到的三个快照。

git checkout master

git merge iss53

一个合并提交。

Git查看所有分支

git branch [option]

option

  • -vv:查看详细信息

远程仓库

添加远程仓库

git remote add <shortname_for_remote> <remote_url>

查看已添加的远程仓库

git remote [option] :打印所有已添加的远程仓库名称

option: 使用-v选项显示远程仓库的url

git remote show <remote_name>:查看某个远程仓库的详细信息

拉取远程仓库的更新

git fetch <remote_name>

fetch仅拉取远程仓库的更新,不会自动和本地分支合并,需要手动merge

git pull <remote_name>:拉取远程仓库的更新并与自动本地分支合并

推送到远程仓库

git push <origin_repo> <local_branch[:remote_branch]>

只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。

删除远程分支

git push origin --delete <branch_name>

远程仓库的重命名与移除

git remote rename <src> <dest>

git remote rm <remote_name>

变基

使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样

据说rebase可以让提交历史更简洁,目前没看出来

rebase的原则:只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作

posted @   iZhang  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示