【git】git学习记录

文章目录

1.版本控制系统分类

  1. 本地版本控制系统VCS
  2. 集中式版本控制系统CVCS
  3. 分布式版本控制系统DVCS

2. Linux安装git

  1. sudo apt-get install git-all
  2. sudo yum install git-all

3. 用户身份

  1. git config --global user.name "chenyanjie"
  2. git config --global user.email "43482012@qq.com"

4. 查看配置

  1. git config --list

5. 初始化git仓库

  1. git init

6. 克隆仓库的3中方式

  1. git clone url
  2. git clone url .
  3. git clone url myrep

7.git add

git add 是一个多功能命令,既可以用来跟踪新文件,也可以用来暂存文件,还可以做一些其他事情,eg:把存在合并冲突的问价你标记为已经解决

8. git status -s简短查看

9. gitignore 在工作区的根目录,并且和.git文件夹在同一级

  1. 忽略单个文件 直接写文件名
  2. 忽略某类文件 *.zip
  3. 忽略文件夹 /target
  4. 分类
    已跟踪tracked:未修改、已修改、已暂存
    未跟踪untracked: 既不在上一次快照中,也不在暂存区中的文件

10. git diff

  1. git diff查看尚未添加到暂存区的变更,不带参数
  2. git diff --staged 查看已暂存的内容的变更,带参数

11. git rm

shell 复制代码
移除某个文件
  a. git rm,
  b. 如果更改了某个文件,并且加入到了暂存区,此时需要使用 -f来强制移除
  c. 取消跟踪:git rm --cached FileName

git remote add origin url 添加远程仓库地址
git remove -v 验证新的远程url
git push origin master 将本地代码,推送到远程的git
git mv 1.txt 2.txt 修改名称
查看提交历史 git log, 
  a. 加-p,查看每次的差异
  b. -2最近两次的提交记录
  c. --since=2.weeks 从两周之前
  d. --since=1.years一年之前
  e. --author 限定某个作者
  f. -Sfunction_name 查找添加或者删除某个字符串参数的日志

撤销操作
  a. git commit -m "test"
  b. git addd filename
  c. git commit --amend
  d. 此时,只会产生一次提交信息

从暂存区中撤销文件 git rm --cached 1.txt
插销已暂存的文件
  a. git reset 1.txt
git checkout 1.txt ,将1.txt回退到当前版本未变化之前
远程仓库的使用
  a. git remote显示远程仓库
  b. git remote -v 显示每个远程仓库对应的url

添加远程仓库
  a. git remote add 【shortname】 【url】 命令
  b. 拉去远程分支,git fetch 【shortname】

12.git commit提交

shell 复制代码
git commit -a -m "内容" 加了-a,在 commit 的时候,能帮你省一步 git add ,
但也只是对修改和删除文件有效, 新文件还是要 git add,不然就是 untracked 状态

git commit --admend 
添加到上一次提交内容中

13. 分支

shell 复制代码
git branch 查看当前分支的简短列表(包括近期切换过的分支)
git branch -v 查看最近分支的最新提交id
git branch --merged 查看最近更改的分支内容,已经并入当前分支的分支
git branch --no-merged 查看最近更改的分支内容,没有并入当前分支的分支
git branch -a 查看当前分支和其他所有分支
git branch new_branch 创建新的分支(只会创建新分支,而不会切换到新的分支上)
git checkout new_branch切换分支
git branch - 切换到上一个分支
git branch -d new_branch或者git branch -D new_branch ,删除的分支如果做过改动,需要用大写D
git checkout -b new_branch创建并切换分支,两个动作合二为一
git merge new_branch new_branch的内容合并到当前分支
git clone -o originfirst 指向远程仓库的(自定义名字)

版本回退
查看版本号 git log 回退 git reset --hard 版本号前七位 在前进 git reflog查看命令 git push -f强制推送

修改上一次提交和将本次的提交内容进行上一次的合并
git commit --amend (会修改logid,将现在的提交加入到上一次(时间是上次提交的时间),可以修改上次提交的内容)

14. 长期分支

不同分支有不同的稳定性

当分支达到更高的稳定程度时,它就被合并到更高级别的分支中去

15.远程分支

16.git远程仓库提交乱码

shell 复制代码
  # 设置 # status编码 
  git config --global core.quotepath false 
  # gui编码
  git config --global gui.encoding utf-8 
  # commit 编码 
  git config --global i18n.commit.encoding utf-8 
  # log 编码 
  git config --global i18n.logoutputencoding utf-8 

17.重新指定远程仓库

shell 复制代码
cd 你要配置git远程仓库的文件夹 
# 移除远程仓库 
git remote rm origin 
# 添加远程仓库 
git remote add origin https://github.com/Saint9768/xxx.git 
# 查看远程仓库 
git remote -v 

18.切换远程地址

shell 复制代码
1、切换远程仓库地址: 
方式一:修改远程仓库地址 【git remote set-url origin URL】 更换远程仓库地址,URL为新地址。 
方式二:先删除远程仓库地址,然后再添加 【git remote rm origin】 删除现有远程仓库 【git remote add origin url】添加新远程仓库 
2、【git remote -v 】查看远程仓库的地址
3、【git remote add 自定义分支名称 新仓库地址】
  • 生产实际操作记录1
shell 复制代码
添加新仓库
git remote add new-origin 新仓库地址
git push --all new-origin #推送所有分支
git push --tags new-origin #推送所有标签
# 5. 如果需要切换远程
git remote remove origin        # 删除旧远程(可选)
git remote rename new-origin origin  # 将新远程命名为origin
  • 生产实际操作记录2
shell 复制代码
git remote set-url origin 新仓库地址
git push -u origin --all #推送所有分支
git push -u origin --tags #推送所有标签

19.git分支命名规范

shell 复制代码
● master(主分支,永远是可用的稳定版本,不能直接在该分支上开发)
● develop(开发主分支,所有新功能以这个分支来创建自己的开发分支,该分支只做合并操作,不能直接在该分支上进行开发)
● feature-xxx(功能开发分支,在develop上创建分支,以自己开发功能模块命名,功能测试正常后合并到develop分支)
● feature-xxx-fix(功能bug修复分支,feature分支合并之后发现bug,在develop上创建分支进行修复,之后合并回develop分支)
PS:feature分支在申请合并之后,未合并之前还是可以提交代码的,所以feature在合并之前还可以在原分支上继续修复bug
● hotfix-xxx(紧急bug修改分支,在master分支上创建,修复完成后合并到master)
● bugfix/*分支 (短期从develop创建)
● release/*分支(短期从develop创建)

20. 回退单个文件的改动

shell 复制代码
git checkout id E:\vsop任务交接\vsop-4\vsoptask
git checkout 提交id 文件/文件夹 

21. gitignore语法

https://blog.csdn.net/m0_57236802/article/details/131041715

shell 复制代码
空行或以#开头的行将被 Git 忽略,可以用作注释。 
星号 * 代表零个或多个任意字符。例如, *.txt 会匹配所有的 .txt 文件。
 问号 ? 代表一个任意字符。例如, ?.txt 会匹配 a.txt 但不会匹配 ab.txt。
 方括号 [] 可以匹配括号内的任一字符。例如, [abc].txt 会匹配 a.txt,b.txt 和 c.txt。 
两个星号 ** 表示任意中间目录。例如, **/foo 会匹配 foo,a/foo,a/b/foo 等。 前缀 ! 表示不忽略。例如, *.txt 和 !important.txt 会忽略所有的 .txt 文件,但不会忽略 important.txt。
 前缀 / 表示只忽略当前目录下的文件。例如, /test 会忽略当前目录下的 test 文件,但不会忽略 a/test。 后缀 / 表示只忽略目录。例如, test/ 会忽略 test 目录,但不会忽略 test 文件。 
#注释 .gitignore的注释 
*.txt # 忽略所有 .txt 后缀的文件
 !src.a # 忽略除 src.a 外的其他文件 
/todo # 仅忽略项目根目录下的 todo 文件,不包括 src/todo 
target 会匹配文件和目录.所有匹配target的文件和目录和子目录,而不仅仅是当前目录下的target
build/ # 忽略 build/目录下的所有文件,过滤整个build文件夹;等价于**/build/ 当前目录以及其子目录中所有名为 "build" 的文件夹 ,但不会忽略build文件
doc/*.txt # 忽略doc目录下所有 .txt 后缀的文件,但不包括doc子目录的 .txt 的文件
bin/: # 忽略当前路径下的 bin 文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件 当前目录以及其子目录中所有名为 "bin" 的文件夹 
/bin: # 仅忽略根目录下的 bin 文件 /*.c: # 仅忽略根目录下 cat.c,不忽略 build/cat.c debug/*.obj: # 忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj **/foo: # 忽略/foo, a/foo, a/b/foo等 a/**/b: # 忽略a/b, a/x/b, a/x/y/b等 !/bin/run.sh # 不忽略bin目录下的run.sh文件 *.log: # 忽略所有 .log 文件 config.js: # 忽略当前路径的 config.js 文件 /mtk/ # 忽略整个文件夹 *.zip # 忽略所有.zip文件 /mtk/do.c # 忽略某个具体文件 
记住,一旦一个文件被 Git 跟踪,就算你在 .gitignore 文件中添加了匹配的规则,它也不会被 Git 忽略。要使 Git 忽略已经被跟踪的文件,你需要先使用 git rm --cached 命令将其从 Git 的跟踪列表中移除。
常用模板
模板:https://github.com/github/gitignore
 ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/** !**/src/test/** # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar # Compiled class file *.class # Log file *.log 

22.错误处理

unexpected disconnect while reading sideband packet 出现这种情况有可能是缓存过小引起的,我们可以尝试增大缓存 增加缓存即可:unexpected disconnect while reading sideband packet

23.git合并其他分支的某一次提交

shell 复制代码
git cherry-pick b8aa0b0c # id可以全写上,也可以只用前8位
相关推荐
babe小鑫44 分钟前
2026信管专业学习数据分析的价值
学习·数据挖掘·数据分析
编程圈子1 小时前
电机驱动开发学习25. 弱磁控制与全速域增益调度
驱动开发·学习
Liekkas Kono2 小时前
aicommits 工具接入 Codex CLI 使用
git·swhl·aicommits
Sayai2 小时前
Elasticsearch 压测利器 esrally 从安装到跑分全流程
大数据·elasticsearch·搜索引擎
Be for thing2 小时前
【嵌入式成长3】STC89C51外部中断|中断原理、寄存器、中断服务函数
单片机·嵌入式硬件·学习
Zach_菠萝侠2 小时前
【DeepSeek Harness 研究】进化方向3:插件生态治理 思考、设计与实现
elasticsearch·deepseek
优化Henry3 小时前
学习笔记之爱立信站点指向证书执行
运维·服务器·网络·笔记·学习·信息与通信
KieranYin3 小时前
Git | WorkTree(工作树)
git
ly76894 小时前
Git 从入门到实战:原理、工作流、分支管理、撤销恢复与团队协作
git·源代码管理
IT古董4 小时前
【WMS学习笔记系列】03-功能模块设计
笔记·学习·系统架构