文章目录
- 1.版本控制系统分类
- [2. Linux安装git](#2. Linux安装git)
- [3. 用户身份](#3. 用户身份)
- [4. 查看配置](#4. 查看配置)
- [5. 初始化git仓库](#5. 初始化git仓库)
- [6. 克隆仓库的3中方式](#6. 克隆仓库的3中方式)
- [7.git add](#7.git add)
- [8. git status -s简短查看](#8. git status -s简短查看)
- [9. gitignore 在工作区的根目录,并且和.git文件夹在同一级](#9. gitignore 在工作区的根目录,并且和.git文件夹在同一级)
- [10. git diff](#10. git diff)
- [11. git rm](#11. git rm)
- [12.git commit提交](#12.git commit提交)
- [13. 分支](#13. 分支)
- [14. 长期分支](#14. 长期分支)
- 15.远程分支
- 16.git远程仓库提交乱码
- 17.重新指定远程仓库
- 18.切换远程地址
- 19.git分支命名规范
- [20. 回退单个文件的改动](#20. 回退单个文件的改动)
- [21. gitignore语法](#21. gitignore语法)
- 22.错误处理
- 23.git合并其他分支的某一次提交
1.版本控制系统分类
- 本地版本控制系统VCS
- 集中式版本控制系统CVCS
- 分布式版本控制系统DVCS
2. Linux安装git
sudo apt-get install git-allsudo yum install git-all
3. 用户身份
git config --global user.name "chenyanjie"git config --global user.email "43482012@qq.com"
4. 查看配置
git config --list
5. 初始化git仓库
git init
6. 克隆仓库的3中方式
git clone urlgit clone url .git clone url myrep
7.git add
git add是一个多功能命令,既可以用来跟踪新文件,也可以用来暂存文件,还可以做一些其他事情,eg:把存在合并冲突的问价你标记为已经解决
8. git status -s简短查看
9. gitignore 在工作区的根目录,并且和.git文件夹在同一级
- 忽略单个文件 直接写文件名
- 忽略某类文件
*.zip- 忽略文件夹
/target- 分类
已跟踪tracked:未修改、已修改、已暂存
未跟踪untracked: 既不在上一次快照中,也不在暂存区中的文件
10. git diff
- git diff查看尚未添加到暂存区的变更,不带参数
- 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位