ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Git基础命令使用笔记

Git基础命令使用笔记

1、配置签名

# Git安装完成后第一件事就是用户与邮箱的配置,因为git提交代码时 # 需要告诉协作用户提交代码的用户具体是谁,此处由用户名与邮箱辨识 # 个人信息的本地化配置包括用户名与邮箱的配置,推荐使用全局配置(--global),具体配置命令如下 git config --global user.name "你的名字" git config --global user.email "你的邮箱@example.com" # 注:1、个人信息的本地化配置与远程仓库账户的名字与邮箱没有关系,可以一致也可以不一致 # 2、本地配置的用户名与邮箱为本地git用户自定义内容,仅用于标识git协作用户,辨识协作仓库中 # 是谁提交的代码,可自由定义,邮箱可为虚拟邮箱,即该邮箱实际不存在也可,只需便于辨识即可 # 使用命令检查配置 git config --global --list # 也可直接打开配置文件查看修改配置 # Windows端git配置文件路径:C:\Users\<你的用户名>\.gitconfig # Linux端与MacOS端git配置文件路径:~/.gitconfig vim .gitconfig

2、创建新仓库/仓库初始化

# 在项目根目录执行git初始化命令 # 如:在名为GitTestProject目录下创建git仓库 # 在该文件夹下打开终端,后执行如下命令,git2.28版本之前的版本默认创建主分支为master分支,之后的新版本默认创建主分支为main分支 git init # 若需指定主分支名,可加上--initial-branch参数进行指定 git init --initial-branch=main # 若默认创建的分支名为master,想要修改为main,课使用如下命令 git branch -m master main # 修改init默认创建的分支为master,也可修改默认为main git config --global init.defaultBranch master # 初始化完成后,可在该目录下看到.git目录

3、克隆仓库

# 克隆仓库一般为克隆远程服务器端仓库,常用的克隆方式分为HTTPS协议克隆与SSH协议克隆 # HTTPS协议克隆,无需额外配置,指定仓库在线路径即可克隆,但像github这样的外网在线仓库容易克隆失败 git clone https://<远程仓库地址>/<github用户>/<项目>.git # 如: git clone https://github.com/zhangxiang1209/Adversarial-attack-embedding-analysis.git # SSH协议克隆,需要配置本地ssh公钥至在线仓库,相对HTTPS协议要更稳定,Github亦可轻松克隆成功 git@<远程仓库地址>:<github用户>/<项目>.git # 如: git@github.com:zhangxiang1209/Adversarial-attack-embedding-analysis.git # 也可克隆本地仓库(一般不用) git clone /path/to/repository

4、仓库工作流

# Git本地仓库由git维护的三棵“树”组成。 # 第一个是项目的实际 工作目录,它持有实际文件; # 第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动; # 最后是 HEAD,它指向你最后一次提交的结果。 # 使用git状态查询命令可以查看仓库中文件的状态, # 包括文件改动,文件暂存区情况,文件仓库提交情况等 git status

5、文件添加

# “添加”操作为Git工作流的第一步,用于将改动的代码添加至暂存区 # 添加修改后的单个文件至暂存区 git add <filename> # 添加除隐藏文件与文件夹外的所有已更改的文件与文件夹至暂存区(不包含.开头的隐藏文件与隐藏文件夹,如.project/ .project.txt,不推荐使用) git add * # 添加所有已更改的文件与文件夹至暂存区(包含所有修改的文件及文件夹,推荐使用) git add . # 交互式提交文件到暂存区 git add -i # 注:提交暂存区的代码可以通过提交新版代码进行替换

6、文件提交

# “提交”操作为Git工作流的第二步,用于将改动提交至仓库 # 提交命令如下,-m指定提交改版本的具体描述信息 git commit -m "版本描述信息" # 修改最后一次提交的版本描述信息 git commit --amend -m "修改的版本描述信息" # 注:提交后代码将永久存在于当前仓库,会生成具体哈希版本号,不能撤回 # 版本描述信息只可以更改最后一次提交的版本描述信息,往期的不可更改

7、关联远程仓库

# 远程仓库与本地仓库的关联是拉取远程仓库与推送本地仓库到远端的前提 # 假设远程仓库的URL是https://github.com/username/repo.git,则关联远程仓库命令如下: git remote add origin https://github.com/username/repo.git # 注:1、其中的origin并不是必须这么写的,只是约定成俗的一种写法。它实际上就是后面的 # git远端仓库的别名。我们以后要找远端仓库,直接输入origin,那么git就知道你要 # 访问的就是远程的git地址了。我们也可以根据自己的需求命名其他的(不推荐)。 # 2、本地与远端仓库的关联是一一对应的,一个本地仓库对应一个“origin”,因为关联信息 # 存储在本地仓库.git/config文件中 # 删除关联,如绑定的git协议地址仓库,但远端未绑定ssh公钥不可用,要修改为http协议地址 git remote remove origin # 使用remove使用Tab键可以提示,使用缩写rm使用Tab键无法提示 git remote rm origin # 关联情况查看 git remote -v # 又因本地与远端的关联信息存储在.git/config文件中,因此关联信息也可使用如下命令查看 cat .git/config # 注:在不同仓库目录终端下执行git remote -v会显示不同“origin”远端仓库关联信息(不同 # 仓库可以均可以使用origin作为远端别名)

8、推送本地仓库至远端

# 关联远程仓库后,可以将本地仓库推送至远端 git push origin master # 推送本地仓库至远程仓库,同时设置远程仓库master分支为本地当前分支的上游分支,加--set-upsteam或-u git push -u origin master git push --set-upsteam origin master # 若前面使用-u设置了远端master分支为本地当前分支的上游分支,后面再推送可以以下命令推送 git push # -u是--set-upsteam的简写,两者完全一致 # 加-u指定上游分支后,git push与pull拉取相同分支时无需指定origin与master参数 # origin是关联仓库时配置的别名,master是要推送的分支 # 注:提交远程仓库时最好先拉取远端最新仓库,本地解决完冲突后再提交

9、分支操作

# 分支是用来将特性开发绝缘开来的。 # 创建仓库的时候,master 是“默认的”分支。 # 在其他分支上进行开发,完成后再将它们合并到主分支上。 # 创建一个叫做“feature_x”的分支,并切换过去 git checkout -b feature_x git switch -c feature_x # 切换分支,切换成功后git终端会显示切换后的分支 # 切换至注主分支 git checkout master git switch master # 切换至feature_x分支 git checkout feature_x git switch master # 注:switch是git2.23版本引入的特性,若支持switch建议使用switch # 删除新建的feature_x分支(谨慎操作) git branch -d feature_x # 推送feature_x分支至远端(只有推送至远端后,其它人才能看到) git push origin feature_x # 合并分支,合并分支操作为其它分支合并到当前分支 # 合并feature_x分支到master分支 # 首先保证当前HEAD指针指向的为master分支(git终端的括号中有提示) # 合并分支 git merge feature_x # 有冲突时需手动解决冲突后再执行merge # 查看冲突 git diff feature_x master # 查看分支合并情况与HEAD指针指向 git reflog

10、拉取远端最新仓库

# 在提交远程仓库时,最好是先拉取远程最新仓库 # 拉取远端仓库所有更新,fatch只拉取不合并,origin为仓库默认名称 git fatch origin # 若名称为origin-test,则拉取命令为 git fatch origin-test # 只拉取特定分支的更新,如feature_x分支的更新 git fatch origin feature_x # 拉取并合并远端当前追踪的分支的最新更新(无需指定当前追踪的分支名称) git pull origin # 若前面push时使用-u指定了上游分支,则可以使用以下命令拉取 git pull # 拉取并合并指定分支的最新更新,如拉取feature_x分支的最新更新并合并 git pull origin feature_x # 该命令相当于git fetch与git merge的组合

11、查看仓库状态

# 查看仓库状态,包括未跟踪的文件、未暂存的更改、当前分支名称、当前分支与远程分支的关系等 git status # 查看简明状态 git status -s

12、标签

# 为仓库当前版本指定版本号 git tag V1.0.0 # 为仓库特定版本(哈希值前几位)指定tag标签,即程序版本号 git tag V1.0.0 1b2e1d63ff # git本地标签推送至远端,如推送V1.0.0至远端 git push -u origin V1.0.0 # 推送本地所有标签至远端,如本地多个提交对应多个tag版本号,如V1.0.0、V1.2.0等 git push -u origin --tags # 若前面使用-u指定了上游分支,后面推送标签可以使用以下命令推送 git push --tags git push --V1.0.0 # 注:1、直接推送分支到远端不会推送版本号,版本号需要单独推送 # 2、推送标签至远端前要保证该标签所对应的提交已经推送至了远端

13、版本切换

# 版本切换至指定哈希版本,以版本哈希6sdfds89为例(谨慎操作) git reset --hard 6sdfds89 # 注:使用版本切换前使用git status -s确认下该命令输出是否为空,即 # 保证仓库本地工作目录与仓库暂存区没有未提交的更改,若存在未提交 # 的更改,一定要先确认更改是否有用、是否需要提交,需要提交则先 # 提交(git add/git commit)后在进行切换,以防止切换版本导致 # 本地工作目录与暂存区代码丢失 # 切换成功后,本地工作目录代码恢复至指定哈希版本,同时使用git reflog # 命令也可以看到HEAD指针最新指向 # 补充说明:在未切换版本时,HEAD指针默认指向HEAD@{0}版本,可以在版本 # 切换前后分别执行git reflog查看HEAD指针指向 # reset相关切换参数除了--hard外,还有--mixed与--soft,但不推荐使用

14、日志

# 了解本地仓库详细历史记录,最简单的命令就是使用: git log # 只看某一个人的提交记录: git log --author=bob # 通过ASCII 艺术的树形结构来展示所有的分支, 每个分支都标示了他的名字和标签: git log --graph --oneline --decorate --all # 查看历史操作记录,查看git HEAD指针移动情况 git reflog

参考博客:git - the simple guide - no deep shit!

Simple Git tutorial for beginners | Nulab

图解Git

【Git】TortoiseGit(小乌龟)配置SSH和使用-腾讯云开发者社区-腾讯云

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进