git常用命令
1、基本概念:
工作区: 当前的编辑位置
缓存区: add 之后的区域
版本库:commit之后的区域就是版本库
github:远程仓库
2、基础命令
初始化:
git init .
提交数据:
查:
git status 查看当前提交的状态
改:
git add . 将工作区的所有文件添加到缓存区
git commit -m “提交信息” 将缓存区的内容添加到版本库
复原数据:
查: git log 查看当前位置之前的提交记录信息,参数git log -p -num --pretty=“format:%h %an %ae %s" git reflog 查看所有的记录 改: git checkout 文件名 将文件回滚到最近一次提交的样子 git reset HEAD 文件名 将缓存区的文件退回到工作区 git reset --hard 记录idhash值 回退到指定的版本
对比数据差异:
git diff 对比工作区和缓存区
git diff --cached 对比版本库和缓存区
3、github 远程仓库与git交互
git remote add origin https://url.git#为创建的远程仓库创建别名 git push origin master将本地分支master提交到远程仓库 git clone https://url.git 克隆远程仓库到本地(本地没有时) git checkout -b dev origin/dev 同步远程仓库dev分支到本地 git branch dev origin/dev+git checkout dev 两者结合与上边命令相同 git pull将远程仓库文件拉取到本地
4、标签(对应远程仓库-github的release)
git tag查看tag git tag -a v1.0 -m "v1.0" 其中v1.0为版本号 git reflog+git tag -a v1.0 记录hash值 git push origin --tags上传到远程创建release git tag -d tagname 删除名字为tagname的tag git push origin :refs/tags/v1.0#github上删除realese:先删除本地git tag -d 本地名,再提交git push origin:refs/tags/v0.1
5、本地创建一个仓库的方法
git init .
git clone 远程仓库地址
6、stash快照
git stash 创建快照并回到最后一次提交的位置
git stash list 查看当前的所有快照
git stash pop 取出快照回到快照位置并删除快照
git stash drop stash@{0}删除快照
git stash apply stash@{0}取出快照位置但不删除快照,pop=apply+drop
7、忽略文件
.gitignore vi .gitignore 写入需忽略的文件12:37 然后add、commit、push.gitignore git提供的gitignore: .gitignore忽略规则的匹配语法 在 .gitignore 文件中,每一行的忽略规则的语法如下: 1)空格不匹配任意文件,可作为分隔符,可用反斜杠转义 2)以“#”开头的行都会被 Git 忽略。即#开头的文件标识注释,可以使用反斜杠进行转义。 3)可以使用标准的glob模式匹配。所谓的glob模式是指shell所使用的简化了的正则表达式。 4)以斜杠"/"开头表示目录;"/"结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;"/"开始的模式匹配项目跟目录;如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录。 5)以星号"*"通配多个字符,即匹配多个任意字符;使用两个星号"" 表示匹配任意中间目录,比如`a//z`可以匹配 a/z, a/b/z 或 a/b/c/z等。 6)以问号"?"通配单个字符,即匹配一个任意字符; 7)以方括号"[]"包含单个字符的匹配列表,即匹配任何一个列在方括号中的字符。比如[abc]表示要么匹配一个a,要么匹配一个b,要么匹配一个c;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配。比如[0-9]表示匹配所有0到9的数字,[a-z]表示匹配任意的小写字母)。 8)以叹号"!"表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。需要特别注意的是:如果文件的父目录已经被前面的规则排除掉了,那么对这个文件用"!"规则是不起作用的。也就是说"!"开头的模式表示否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用"!"也不会再次被包含。可以使用反斜杠进行转义。 需要谨记:git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;
https://help.github.com/en/articles/connecting-to-github-with-ssh
from git import Repo repo=Repo("项目路径") repo.avtive_branch #git add repo.index.add(["c.py"]) repo.index.commit("信息") #git tag -a repo.create tag("v0.1") #git branch repo .create_head("dev") #git checkout --filename #回到上次的记录位置 repo.index.checkout()??? #git reset --hard 记录的hash值 repo.index.reset(commit=记录的hash值,head=True) [str(b) for b in repo.branches]#显示所有的branch名称 [str(b) for b in repo.tags]#显示所有的tags名称 import git clone=git.Repo.clone_from("url","to_path") #git push and pull clone.remote().pull() clone.remote().push()
执行原生(git bash的)git语句 repo=git.Git(项目路径) #git add d.py repo.add("d.py") #git commit -m "create d.py" repo.commit("-m create d.py")