Git
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。 使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
分支操作(默认的主分支名为 master)
创建分支并切换: git checkout -b 分支名称
等同于下面两句话
(
1.创建分支: git branch 分支名称
2.切换到某分支: git checkout 分支名称
)
本地创建分支并关联远程分支: git checkout -b 本地分支名 origin/远程分支名
建立本地分支和远程分支的关联,使用: git branch --set-upstream 本地分支名 origin/远程分支名
合并指定分支到当前分支: git merge 目标分支名
查看所有本地分支(当前分支前会有一个*号): git branch
删除某个分支: git branch -d 分支名
强行删除分支: git branch -D 分支名
用带参数的git log也可以看到分支的合并情况: git log --graph --pretty=oneline --abbrev-commit (用git log --graph命令可以看到分支合并图)
带参数的合并,并产生一个新的commit: git merge --no-ff -m "merge with no-ff" dev
存储当前工作空间,解决其他问题,并还原
1. git stash "贮藏描述" (存储当前工作区)
2. 其他操作,例如修复bug要创建新的分支,提交合并并且删除bug分支
3. git stash list (查看工作区)
(会输出)
stash@{0}: WIP on master: 2b5faea new info text
stash@{1}: WIP on dev: b0f1f6a conflict fixed
stash@{2}: WIP on dev: b0f1f6a conflict fixed
4. git shash apply stash@{n} (恢复到哪个工作区)
5. git shash drop(删除缓冲区序号最小的工作区)
(6. 45两步可以用 git stash pop 会直接还原到序号最小的工作区并将其删除)
拉取: git pull 如果有冲突,要先处理冲突。
标签 Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。 打一个新的标签: git tag 标签名 给某一个历史提交打标签: git tag 标签名 提交Hash
查看标签列表: git tag
查看具体标签: git show tagName
创建带有说明的标签,用-a指定标签名,-m指定说明文字: git tag -a v0.1 -m "标签说明内容" 提交Hash
通过-s用私钥签名一个标签: git tag -s v0.2 -m "标签说明内容" 提交Hash (签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错)
删除本地标签: git tag -d tagName
推送标签: git push origin v1.0
推送所有标签: git push origin --tags
删除服务器上的标签:
1.先删除本地标签
2. git push origin :refs/tags/tagName
一些基本的操作 指定你的信息 - git config –global user.name “Your Name” - git config –global user.email “email@example.com” 查看信息 - git config –global user.name - git config –global user.email 创建管理仓库: git init
把文件添加到仓库: git add path/文件1 path/文件2 ...
交互式添加: git add -i
查看提交日志: git log (--pretty=oneline)
查看最后一次提交: git log -1
提交
- git commit -m "提交日志记录"
- git commit -a 可以不用写提交记录,但是强烈不建议这么做
查看哪个文件被改动过: git status
查看具体文件具体怎么改动的
- git diff //查看当前所有的更改
- git diff path/文件 //查看某个文件的改动
- git diff --cached // 查看将要提交哪些文件去commit
- git diff master..test //查询master和test两个分支的差异
- git diff master...test //查询 master和test两个分支的共有父分支 和 test分支的差异
- git diff -- 目录 // (-- 目录 一定要连着, 尽量写在最后), 查询某个目录下的差异
- git diff --stat //简要的差异, 不输出详细差异内容, 只看看改了那些文件
回溯到上个版本(上上个版本|某个版本): git reset --hard HEAD^(HEAD^^|commit id)
如果你后悔了一个推送,撤销远程分支的提交: git reset --hard origin/远程分支 //这个操作很危险, 不得已不要做
还原更改
让这个文件回到最近一次git commit或git add时的状态
git checkout -- file (命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令)
清除最近一次的add操作(添加到缓存区操作): git reset HEAD file
让Git显示颜色,会让命令输出看起来更醒目: git config --global color.ui true
忽略特殊文件
1. 创建 .gitignore 文件
2. 如果要忽略python 那么写 *.py *.py[cod]
配置别名
--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用,全局git的配置文件是用户主目录下的 .gitconfig文件
- git config --global alias.st status
- git config --global alias.unstage 'reset HEAD'
- git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
查看命令历史: git reflog
于服务器的交互操作 关联一个远程库 使用ssh协议添加库,这个需要添加ssh_key 来交互认证不用用户名,自己建服务器都是用这种方式 git remote add origin git@server-name:path/repo-name.git 使用https添加库,每次推送代码都会要求写用户名密码来认证,在github上可以用,自己的服务器不清楚 git remote add origin https://path/proname.git 推送到远程仓库 git push -u origin 分支名 第一次推送master分支的所有内容 git push origin 分支名 推送最新修改 git push -f origin 分支名 //强制推送–慎用 git push origin +分支名 //在push之前拉取内容 克隆远程仓库 git clone git@server-name:path/repo-name.git //github用法 git clone https://path/proname.git 删除远程分支 git push origin :dev(这个空格很重要)
其他操作 桌面平台显示项目提交记录:gitk //执行了gitk后会有一个很漂亮的图形的显示项目的历史,windows桌面环境有 git clone 远程地址(本地其他仓库,只要是有.git) 本地目录
辅助操作 创建ssh_key ssh-keygen -t rsa -C “ssh-keygen@163.com” 在用户主目录会生成 .ssh目录,里面有id_rsa和id_rsa.pub两个文件