基本介绍:
概述:
一个实现项目版本控制的软件,通过快照保存代码修改部分而非简单复制。
工作原理:
.git是Git的版本库。stage(或者叫index)称为暂存区,Git自动创建的第一个分支master,
以及指向master的一个指针叫HEAD
新建流程:
1.github上创建新项目
2.初始化本地
git init
git add . (注:别忘记后面的.,此操作是把Test文件夹下面的文件都添加进来)
git commit -m "提交信息" (注:“提交信息”里面换成你需要,如“first commit”)
3.关联远程
git remote add origin git@github.com:dragon0486/notebook.git
git pull --set-upstream origin master
git branch --set-upstream-to=origin/master
如果名字不同,可能还得git pull --allow-unrelated-histories
4.git push (注:此操作目的是把本地仓库push到github上面,此步骤需要你输入帐号和密码)
本地推送到远程仓库:
git init cd到当前项目根路径下
git remote add origin 项目地址 如果是本地创建的项目,这步可以提交给github创建一个项目,origin是项目地址的别名
git add .
git commit -m ''
git pull origin master
git push origin master
git push
git pull
git config user.email "chenzl@akulaku.com" 邮箱
git config user.name "dragon0486" 用户名
git config credential.helper store
回滚操作:
1.修改后,回滚到未提交前修改后add前
git checkout file -- readme.md
git checkout
2.修改并add后,回滚到未提交前修改后add前,将暂存区的修改撤销掉,重新放回工作区
git reset HEAD file
3.commit后,回滚到修改并add后commit前
git reset
4.commit后,回滚到修改后add前
git reset
5.commit后,回滚到修改前,把当前版本回退到上一个提交版本,修改前
git reset
例子:
git reset
查看提交历史:
git reflog
git log
git log --pretty=oneline
本地仓库新提交到远程:
git remote add origin 地址
git push -u origin master
新的空项目推送:
git remote rename origin old-origin
git remote add origin git@git.i.coolpad.com:chenzenglong/sample.git
git push -u origin
git push -u origin
拉取远程分支并本地新建:
先删除
git fetch origin dev
git checkout -b dev origin/dev
或者git checkout
git pull origin dev
fork分支更新:
git checkout dev
git pull apulis dev
git push
github提交后回退分支:
git reset
git push
git拉取不了远程新的分支:
查看所有的分支:
git branch -a
还是查看不了
原因:
git clone --single-branch拉取后的.git/config目录设置了
fetch = +refs/heads/no_network:refs/remotes/origin/no_network
修改为:
fetch = +refs/heads/*:refs/remotes/origin/*
如何推送所有remote到另一个remote?
git pull origin --all
git push czl --all
git push czl refs/remotes/origin/*:refs/heads/*
分支管理:
创建dev分支并切换:
git checkout -b dev
创建远程的分支到本地:
git checkout -b dev origin/dev
指定本地dev分支与远程origin/dev分支的链接:
git branch --set-upstream-to=origin/dev dev
查看分支列表:
git branch
创建新分支,拷贝所有代码:
git branch dev
切换分支:
git checkout dev
删除分支:
git branch -d dev
创建远程分支(本地分支push到远程):
git push origin [name]
删除远程分支:
git push origin --delete Chapater6
拉取远程仓库:
git pull origin czl:czl
分支策略:
master分支:
应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
dev分支:
是不稳定的,每个人都有自己的分支,时不时地往dev分支上合并就可以了
feature分支:
新功能分支
bug分支:
概述:
主线分支的bug修复分支
工作流程:
1.先把当前工作现场“储藏”起来,回到修改前
git stash
2.切到主分支上,生成一个bug分支,这样就会复制master的内容
git branch -b
3.修改bug
4.提交 add commit
5.切换到master主分支
6.pull看看master有没有更新
git pull origin master
7.git merge bug看看
8.手动合并修改内容,然后add,再commit
9.提交bug修复
git push origin master
10.恢复工作现场,删除bug分支 # 恢复时这期间的修改会自动检测并合并
git stash list
git stash apply
git stash drop
git stash pop
git branch -d issue-101
忽略上传文件:
概述:
.gitignore文件管理
常用命令:
git add -f App.class
git check-ignore -v App.class
规则:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
擦除ignore文件添加前git追踪的文件(但历史还存在):
git rm
git rm
git rm -f fileName执行该命令后, git不再跟踪fileName, 同时fileName文件被删除
Tag标签:
git tag -a v1.0 -m '版本介绍' 本地创建Tag
git show v1.0 查看
git tags -n 查看本地Tag
git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配
git tag -d v1.0 删除Tag
git push origin :refs/tags/v0.2 更新远程tag
git checkout v.10 切换tag
git fetch origin tag V1.2
git push origin --tags
git pull origin --tags
git clone -b v0.1 项目地址
登录管理:
账号密码配置:
git config
ssh配置:
1.删除.ssh文件夹(直接搜索该文件夹)下的known_hosts(手动删除即可,不需要git)。
2.在下载好的Git中的bin目录下打开bash.exe输入命令ssh-keygen -t rsa -C "username"
(注:username为你git上的用户名)
3.然后找到系统自动在.ssh文件夹下生成两个文件,id_rsa和id_rsa.pub,用记事本打开id_rsa.pub将全部的内容复制。
4.打开https://github.com/,登陆你的账户,进入设置(Settings)找到
5.然后将你复制的内容粘贴到key中
6.仍然在bash.exe中输入ssh -T git@github.com
私钥放到/home/czl/.ssh/id_rsa
Dockerfile配置:
账号密码:
RUN git clone https://username:password@github.com/username/repository.git
Token:
https://token@github.com/username/repository.git
暂存:
git stash pop后发生冲突
git reset --merge返回stash内容,可以再次pop
LFS大文件管理:
概述:
Large File Storage
将你所标记的大文件保存至另外的仓库,而在主仓库仅保留其轻量级指针.那么在你检出版本时,根据指针的变化情况下更新对应的大文件.而不是在本地保存所有版本的大文件
命令:
git lfs install 开启lfs功能
git lfs track 命令进行大文件追踪 例如git lfs track "*.png" 追踪所有后缀为png的文件
git lfs track 查看现有的文件追踪模式
提交代码需要将gitattributes文件提交至仓库. 它保存了文件的追踪记录
提交后运行git lfs ls-files 可以显示当前跟踪的文件列表
将代码 push 到远程仓库后,LFS 跟踪的文件会以『Git LFS』的形式显示:
clone 时 使用'git clone' 或 git lfs clone均可
远程源:
查看:
git remote -v
添加:
git remote add 名字 地址
修改:
git remote set-url origin https:
git branch --set-upstream-to=origin/develop develop
删除history:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" --prune-empty --tag-name-filter cat -- --all
git push --force注意这时候与remote不同,需要force推送,会将remote的改动清空
# 如果是最近的改动,还可以指定最近30次
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch cvat/apps/documentation/static/documentation/assets/car.gif" HEAD~30..HEAD
--env-filter 需要重写作者/提交者名称/电子邮件/时间环境变量
--tree-filter 重写树及其内容的过滤器。该参数在shell中用工作目录设置为检出树的根来评估。然后使用新的树(新文件自动添加,消失的文件会自动删除。.gitignore文件和其他忽略规则不会有任何影响!
--index-filter 重写索引的过滤器。它类似于树型过滤器,但不检出树,这使得它更快。经常使用git rm --cached --ignore-unmatch ...
--msg-filter 重写提交消息的过滤器。参数在shell中使用标准输入的原始提交消息进行评估; 其标准输出被用作新的提交消息。
--tag-name-filter 重写标签名称的过滤器。传递时,将调用指向重写对象(或指向重写对象的标记对象)的每个标记ref。原始标签名称通过标准输入传递,新标签名称预计在标准输出上。
--subdirectory-filter 结果将包含该目录(并且仅包含该目录)作为其项目根目录。意味着重新映射到祖先。
tag管理:
切换:
git tag
git checkout tag_name 切换,git 可能会提示你当前处于一个“detached HEAD" 状态。(detached 分离的)
创建:
git tag tagName
git tag -a tagName -m "my tag"
推送:
git push origin tagName
删除:
git tag -d v20190514
git push origin :refs/tags/v20190514
rebase命令:
概述:
会合并之前的commit历史
优点:
得到更简洁的项目历史,去掉了merge commit
缺点:
如果合并出现代码问题不容易定位,因为re-write了history
改变基:
git checkout dev
git rebase master
合并时如果出现冲突需要按照如下步骤解决:
修改冲突部分
git add
git rebase
(如果第三步无效可以执行 git rebase
效果:
commits的基会变为master
后续:
git checkout master
git merge 其他分支 这个时侯并不是在merge代码,而是把HEAD指针移动到最新位置而已。(因为基变化了),如果有分叉,说明master基更新了,需要再次rebase
其他用法:
在master上执行git rebase 待合并的分支 这样也可以避免merge
合并提交记录
git show-branch
git rebase -i master~ // git rebase -i HEAD~4
显示内容如下:
pick 92ae9c4 second commit
pick 0985eec third commit。 挑选这个作为后面commits合并的commit,后面的commit都改pick为s
pick 5bd480c four commit
保存退出后,又会打开一个vim编辑器窗口
选择注释哪些commit信息,可以新增comment
可能会发生冲突
解决
git add
git rebase
最后完成rebase
git push origin lcoal_branch:my_remote_new_branch
如何校验差距:
git diff master..master --no-prefix -U1000 > xxx.diff
参数:
--no-prefix可以去掉分支前缀
-U1000显示合并后的相同代码地方的行数,更多方便查看上下文。
..表示vs分隔开前后两个对比的分支。
github操作:
常用词:
watch
fork
star
clone
follow
搜索范围:
概述:
in关键词
示例:
in:name/description/readme
限制搜索:
概述:
可以按照star或者fork数量进行限制
示例:
stars:>=5000 大于
forks:>=5000
stars:80..100 区间
精品搜索:
概述:
awesome关键词会返回
示例:
awesome 搜索关键词
高亮显示:
概述:
示例:
启用文件列表:
概述:
t,按下后会展示文件列表。
搜索用户:
概述:
支持location:拼音、language:语言来搜索指定的用户