Git使用

  1. 本地登录SSH认证
    (1)本地SSH公钥生成。
    打开git bash终端,输入:ssh-keygen –t rsa –C “邮箱地址”,邮箱地址为你的github账号邮箱。

(2)执行上一步命令成功后会在用户文件夹下生成ssh公钥文件。若能可以访问文件夹.ssh,则说明文件夹生成成功。

(3)找到.ssh文件夹,选择后缀为.pub的文件并用记事本打开,复制里面的内容。
(4)登录github网站,在setting里面找到ssh key,选择new ssh key。将之前复制的内容添加到ssh可以里面。Title我们可以起计算机的名字,因为每个计算机的ssh key是唯一的,并且添加一次后无需再次添加。最后保存。

(5)在git bash中输入ssh git@github.com进行连接认证。其中会询问是否需要进行连接,输入yes。如图所示,认证成功。

  1. git常用命令
    git branch 查看本地所有分支
    git status 查看当前状态
    git commit 提交
    git branch –a 查看所有的分支
    git branch –r 查看远程所有分支
    git commit –am “init” 提交并且加注释
    git clone * 从服务器把代码拉下来
    git rm 从git删除指定文件
    git diff –cached 查看尚未提交的更新
    git pull 本地与服务器端同步
    git fetch 从远程获取最新版到本地,不会自动merge
    git branch branch_0.1 master从主分支创建branch_0.1分支
    git branch –m branch_0.1 branch_1.0 将branch_0.1重命名为branch_1.0
    git checkout branch_1.0 切换到branch_1.0分支

回到远程仓库的状态
抛弃本地仓库的所有版本(commit),回到远程仓库的状态。
git fetch –all && git reset –hard origin/master
重设第一个commit
也就是把所有的改动都重新放回工作区,并清空所有的commit,这样就可以重新提交第一个commit了
git update-ref -d HEAD
展示工作区和暂存区的不同
输出工作区和暂存区的different(不同)。
git diff
还可以展示本地仓库中任意两个commit之间的文件变动:
git diff
展示暂存区和最近版本的不同
输出暂存区和本地最近的版本(commit)的different(不同)。
git diff –cached
展示暂存区、工作区和最近版本的不同
输出工作区、暂存区 和本地最近的版本(commit)的different(不同)。
git diff HEAD
快速切换分支
git checkout -
删除已经合并到master的分支
git branch –merged master | grep -v ‘^*| master’ | xargs -n 1 git branch -d
展示所有的分支关联的远程仓库
git branch -vv
关联远程分支
关联之后,git branch -vv就可以展示关联的远程分支名了,同时推送到远程仓库直接:git push,不需要指定远程仓库了。
git branch -u origin/mybranch
或者在push时加上-u参数
git push origin/mybranch -u
删除本地分支
git branch -d
删除远程分支
git push origin –delete
或者
git push origin :
查看标签
git tag
展示当前分支的最近的tag
git describe –tags –abbrev=0
本地创建标签
git tag
默认tag是打在最近的一次commit上,如果需要指定commit打tag:
$ git tag -a -m “v1.0 发布(描述)”
推送标签到远程仓库
首先要保证本地创建好了标签才可以推送标签到远程仓库:
git push origin
一次性推送所有标签,同步到远程仓库:
git push origin –tags
删除本地标签
git tag -d
删除远程标签
删除远程标签需要先删除本地标签,再执行下面的命令
git push origin :refs/tags/
放弃工作区的修改
git checkout
放弃所有修改:
git checkout .
回到某一个commit的状态,并重新增添一个commit
git revert
回到某个commit的状态,并删除后面的commit
和revert的区别:reset命令会抹去某个commit id之后的所有commit
git reset
修改上一个commit的描述
git commit –amend
查看commit历史
git log
查看某段代码是谁写的
blame的意思为‘责怪’,你懂的。
git blame
显示本地执行过git命令
就像shell的history一样
git reflog
修改作者名
git commit –amend –author=’Author Name email@address.com
修改远程仓库的url
git remote set-url origin
列出所有远程仓库
git remote
列出本地和远程分支
-a参数相当于:all
git branch -a
列出远程分支
-r参数相当于:remote
git branch -r
查看两个星期内的改动
git whatchanged –since=’2 weeks ago’
把A分支的某一个commit,放到B分支上
这个过程需要cherry-pick命令,参考
git checkout && git cherry-pick
给git命令起别名
简化命令
git config –global alias. 比如:git status 改成 git st,这样可以简化命令

git config –global alias.st status
存储当前的修改,但不用提交commit
详解可以参考廖雪峰老师的git教程
git stash
保存当前状态,包括untracked的文件
untracked文件:新建的文件
git stash -u
展示所有stashes
git stash list
回到某个stash的状态
git stash apply stash@{n}
回到最后一个stash的状态,并删除这个stash
git stash pop
删除所有的stash
git stash clear
从stash中拿出某个文件的修改
git checkout stash@{n}
展示所有tracked的文件
git ls-files -t
展示所有untracked的文件
git ls-files –others
展示所有忽略的文件
git ls-files –others -i –exclude-standard
强制删除untracked的文件
可以用来删除新建的文件。如果不指定文件文件名,则清空所有工作的untracked文件。clean命令,注意两点:

  1. clean后,删除的文件无法找回 2. 不会影响tracked的文件的改动,只会删除untracked的文件
    git clean -f
    强制删除untracked的目录
    可以用来删除新建的目录,注意:这个命令也可以用来删除untracked的文件。详情见上一条
    git clean -df
    重命名分支
    git branch -m
    展示简化的commit历史
    git log –pretty=oneline –graph –decorate –all
    把某一个分支到导出成一个文件
    git bundle create
    从包中导入分支
    新建一个分支,分支内容就是上面git bundle create命令导出的内容
    git clone repo.bundle -b
    执行rebase之前自动stash
    git rebase –autostash
    从远程仓库根据ID,拉下某一状态,到本地分支
    git fetch origin pull//head:
    详细展示一行中的修改
    git diff –word-diff
    清除gitignore文件中记录的文件
    git clean -X -f
    展示所有alias和configs
    git config –list
    展示忽略的文件
    git status –ignored
    commit历史中显示Branch1有的,但是Branch2没有commit
    git log Branch1 ^Branch2
    在commit log中显示GPG签名
    git log –show-signature
    删除全局设置
    git config –global –unset
    新建并切换到新分支上,同时这个分支没有任何commit
    相当于保存修改,但是重写commit历史
    git checkout –orphan
    展示任意分支某一文件的内容
    git show :
    clone下来指定的单一分支
    git clone -b –single-branch https://github.com/user/repo.git
    创建并切换到该分支
    git checkout -b
    忽略文件的权限变化
    不再将文件的权限变化视作改动
    git config core.fileMode false
    展示本地所有的分支的commit
    最新的放在最上面
    git for-each-ref –sort=-committerdate –format=’%(refname:short)’ refs/heads/
    在commit log中查找相关内容
    通过grep查找,given-text:所需要查找的字段
    git log –all –grep=’
    把暂存区的指定file放到工作区中
    git reset
    强制推送
    git push -f
    增加远程仓库
    git remote add origin

Mac下git设置外部比较工具(Beyond Compare):
打开Beyond Compare——>Beyond Compare Menu ——>Install Command Line Tools

如果不安装的话,会出现错误:

The diff tool bc3 is not available as ‘bcompare’
fatal: external diff died,stopping at plugins/PushPlugin.m

在终端:

git config --global diff.tool bc3

Compare

需要比较的时候,输入git difftool <文件名>

Merge

在终端:

git config --global merge.tool bc3
git config --global mergetool.bc3 trustExitCode true

代码冲突的时候,git mergetool 即可唤起Beyond Compare。

解决冲突后,会生成备份文件(*.orig),不想要这些文件,可以配置:
git config –global mergetool.keepBackup false

这样,每次解决冲突后对应的.orig文件就不会生成了。