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两个文件