【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位
相关推荐
weixin_409383122 小时前
简单四方向a*寻路学习记录3 将角色世界坐标传给地图数组 计算上下左右四个格子到目的地的f 选择最小的f方向
学习·a星
学编程的闹钟2 小时前
浅谈VMProtectV2.13.8的IAT修复
学习
盐焗西兰花2 小时前
鸿蒙学习实战之路-多端交互最佳实践
学习·交互·harmonyos
AI绘画哇哒哒2 小时前
AI 智能体长期记忆系统架构设计与落地实践
人工智能·学习·算法·ai·程序员·产品经理·转行
JH灰色3 小时前
【大模型】学习路线
学习
测试人社区—84163 小时前
Mocking与Stubbing在单元测试中的正确使用
人工智能·git·单元测试·自动化·bug·postman
林林宋3 小时前
nvidia&cuda&gpu 关系学习
学习
学编程的闹钟3 小时前
102【php开发准备】
学习
半夏知半秋4 小时前
Elasticsearch 分词器
大数据·学习·elasticsearch·搜索引擎·全文检索