一、Mac/Windows Git配置SSH
1.生成SSH KEY
$ ssh-keygen -t rsa -C 1573488389@qq.com
注:邮箱填写你提交代码时要用的邮箱
2.查看.pub文件(.文件隐藏文件,使用ls -a显示隐藏文件)
$ cd ~/.ssh 切换目录到这个路径
$ vim id_rsa.pub 将这个文件的内容显示到终端上
也可以直接前往.shh文件所在的路径(前往~/.ssh这个路径),然后打开.pub这个文件,同样可以看到里面的内容
3.将KEY添加到github的SSH Key里。
二、Git常用命令
说明:
- workspace:工作区
- staging area:暂存区/缓存区
- local repository:版本库或本地仓库
- remote repository:远程仓库
配置好ssh 好后就能拉取推送代码到远端仓库了。
一、新建代码库
# 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-name] # 下载一个项目和它的整个代码历史 $ git clone [url]
二、配置
Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
# 列出当前所有配置, 包含本地、全局、系统配置 $ git config --list # 编辑Git配置文件 $ git config -e [--global] # 设置提交代码时的用户信息/配置用户名 $ git config [--global] user.name "[name]" $ git config [--global] user.email "[email address]" git config --global user.name "your name" # 列出本地配置 git config --local --list # 列出全局配置 git config --global --list # 列出系统配置 git config --system --list # 配置用户邮箱 git config --global user.email "your email"
三、增加/删除文件
# 添加指定文件到暂存区 $ git add [file1] [file2] ... # 添加指定目录到暂存区,包括子目录 $ git add [dir] # 添加当前目录的所有文件到暂存区 $ git add . # 添加每个变化前,都会要求确认 # 对于同一个文件的多处变化,可以实现分次提交 $ git add -p # 删除工作区文件,并且将这次删除放入暂存区 $ git rm [file1] [file2] ... # 停止追踪指定文件,但该文件会保留在工作区 $ git rm --cached [file] # 改名文件,并且将这个改名放入暂存区 $ git mv [file-original] [file-renamed]
四、代码提交
# 提交暂存区到仓库区 $ git commit -m [message] # 提交暂存区的指定文件到仓库区 $ git commit [file1] [file2] ... -m [message] # 提交工作区自上次commit之后的变化,直接到仓库区 $ git commit -a # 提交时显示所有diff信息 $ git commit -v # 使用一次新的commit,替代上一次提交 # 如果代码没有任何新变化,则用来改写上一次commit的提交信息 $ git commit --amend -m [message] # 重做上一次commit,并包括指定文件的新变化 $ git commit --amend [file1] [file2] ...
五、分支
git checkout qzk_google_client.py # error: 路径规格 'qk_ooe_cent.py' 未匹配任何 git 已知文件 # 列出所有本地分支 $ git branch # 列出所有远程分支 $ git branch -r # 列出所有本地分支和远程分支 $ git branch -a # 新建一个分支,但依然停留在当前分支 $ git branch [branch-name] # 新建一个分支,并切换到该分支 $ git checkout -b [branch] # 新建一个分支,指向指定commit $ git branch [branch] [commit] # 新建一个分支,与指定的远程分支建立追踪关系 $ git branch --track [branch] [remote-branch] # 切换到指定分支,并更新工作区 $ git checkout [branch-name] # 切换到上一个分支 $ git checkout - # 建立追踪关系,在现有分支与指定的远程分支之间 $ git branch --set-upstream [branch] [remote-branch] # 合并指定分支到当前分支 $ git merge [branch] # 选择一个commit,合并进当前分支 $ git cherry-pick [commit] # 删除分支 $ git branch -d [branch-name] # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch] # 重命名分支 git branch -m <oldbranch-name> <newbranch-name>
六、标签
# 列出所有tag $ git tag # 新建一个tag在当前commit $ git tag [tag] # 新建一个tag在指定commit $ git tag [tag] [commit] # 删除本地tag $ git tag -d [tag] # 删除远程tag $ git push origin :refs/tags/[tagName] # 查看tag信息 $ git show [tag] # 提交指定tag $ git push [remote] [tag] # 提交所有tag $ git push [remote] --tags # 新建一个分支,指向某个tag $ git checkout -b [branch] [tag]
七、查看信息
git status 位于分支 master 您的分支与上游分支 'origin/master' 一致。 未跟踪的文件: (使用 "git add <文件>..." 以包含要提交的内容) ../../qk/ ../meis/q.py ../metc/zhnai.sh ../uer_aysis/cliet_11226/ ../user_ansis/etpv.py ../usr_aais/run_et_pv.sh ../use_aays/rn_vi_istic_daily.sh ../sr_nlsis/serrcd_flow_v2.json k_ggle_ient.py # 显示有变更的文件 $ git status # 显示当前分支的版本历史 $ git log # 显示commit历史,以及每次commit发生变更的文件 $ git log --stat # 搜索提交历史,根据关键词 $ git log -S [keyword] # 显示某个commit之后的所有变动,每个commit占据一行 $ git log [tag] HEAD --pretty=format:%s # 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 $ git log [tag] HEAD --grep feature # 显示某个文件的版本历史,包括文件改名 $ git log --follow [file] $ git whatchanged [file] # 显示指定文件相关的每一次diff $ git log -p [file] # 显示过去5次提交 $ git log -5 --pretty --oneline # 显示所有提交过的用户,按提交次数排序 $ git shortlog -sn # 显示指定文件是什么人在什么时间修改过 $ git blame [file] # 显示暂存区和工作区的差异 $ git diff # 显示暂存区和上一个commit的差异 $ git diff --cached [file] # 显示工作区与当前分支最新commit之间的差异 $ git diff HEAD # 显示两次提交之间的差异 $ git diff [first-branch]...[second-branch] # 显示今天你写了多少行代码 $ git diff --shortstat "@{0 day ago}" # 显示某次提交的元数据和内容变化 $ git show [commit] # 显示某次提交发生变化的文件 $ git show --name-only [commit] # 显示某次提交时,某个文件的内容 $ git show [commit]:[filename] # 显示当前分支的最近几次提交 $ git reflog
八、远程同步
# 下载远程仓库的所有变动 $ git fetch [remote] # 显示所有远程仓库 $ git remote -v # 显示某个远程仓库的信息 $ git remote show [remote] # 增加一个新的远程仓库,并命名 $ git remote add [shortname] [url] # 重新命名远端仓库 git remote rename oldName newName # 移除远端仓库 git remote remove origin # 取回远程仓库的变化,并与本地分支合并 $ git pull [remote] [branch] git pull origin master # 上传本地指定分支到远程仓库 $ git push [remote] [branch] # 强行推送当前分支到远程仓库,即使有冲突 $ git push [remote] --force # 推送所有分支到远程仓库 $ git push [remote] --all
九、撤销
# 恢复暂存区的指定文件到工作区 $ git checkout [file] # 恢复某个commit的指定文件到暂存区和工作区 $ git checkout [commit] [file] # 恢复暂存区的所有文件到工作区 $ git checkout . # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 $ git reset [file] # 重置暂存区与工作区,与上一次commit保持一致 $ git reset --hard # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 $ git reset [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致 $ git reset --hard [commit] # 重置当前HEAD为指定commit,但保持暂存区和工作区不变 $ git reset --keep [commit] # 新建一个commit,用来撤销指定commit # 后者的所有变化都将被前者抵消,并且应用到当前分支 $ git revert [commit] # 暂时将未提交的变化移除,稍后再移入 $ git stash $ git stash pop
十、文档查询
# 查看命令大纲 git help # 查看所有命令 git help -a
十一、其他
# 生成一个可供发布的压缩包 $ git archive
参考:https://gitee.com/all-about-git
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释 *.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中! !lib.txt #但lib.txt除外 /temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp build/ #忽略build/目录下的所有文件 doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
三、iTerm2使用技巧(选中即复制)
iTerm2是mac系统下的一款非常好用的终端工具,它比系统自带的Terminal好用得多。有丰富的特色功能供,比如快捷键、分屏、定制终端主题颜色等;这些功能极大的提高我们敲命令的效率。
1、启动一个连接到远程server的终端:
选择“Preferences->Profiles”,新增一个profile,并设置启动的快捷键和command命令,如图:
之后连接远程server,不用每次输入ssh命令,只需要敲你自己设置的快捷键,就能调出。
2、分屏
使用快捷键“cmd+d”实现左右分屏,快捷键“cmd+shift+d”实现上下分屏,command + ] 和command + [ 在最近使用的分屏直接切换:
3、颜色配置
选择“Preferences->Profiles”,在“color”一栏可以为当前的profile配置颜色主题。
4、搜索及文本复制
使用“cmd+f”可以调出搜索框进行文本搜索,然后有个很奇妙的快捷键“tab”键,使用它后会自动高亮当前文本后面的内容。最后按enter键将高亮文本复制到剪切板上。这几个按键连用代替了使用鼠标复制文本内容:
5、自动完成提示
按"cmd+;"可以弹出自动完成提示。
6、调出复制过的文本历史
快捷键:“shift+cmd+h”。
7、按键回放
能回放一段时间内的你敲过的所有字符。
快捷键:“cmd+alt+b”,如图会弹出一个进度条,按左右键就可以实现按键回放了。
8、快速打开profile或者切换到指定tab
快捷键“shift+cmd+o”。
9、显示命令执行时间、高亮显示光标所在行
10、标记(mark)
shift+cmd+m可以标记当前行,shift+cmd+上/下箭头进行标记的查看,shift+cmd+j跳转到正在查看的标记。
11、设置快速在单词间移动的快捷键
iIterm2下,光标在单词间移动默认的快捷键是esc+b/f(向左/右移动)。可以通过Key Mapping设置成和mac自带的Terminal一样的快捷键:“alt+左/右箭头”
选择“Preferences->Profiles->Keys”,
12、标题栏显示当前所在路径
打开~/.bash_profile,添加对PROMPT_COMMAND的配置
exportPROMPT_COMMAND='echo -ne "\033]0;$PWD\007"'
效果:
iTerm2 快捷命令
命令 | 说明 |
command + t | 新建标签 |
command + w | 关闭标签 |
command + 数字 / command + 左右方向键 | 切换标签 |
command + enter | 切换全屏 |
command + f | 查找 |
command + d | 垂直分屏 |
command + shift + d | 水平分屏 |
command + ; | 查看历史命令 |
command + shift + h | 查看剪贴板历史 |
ctrl + u | 清除当前行 |
ctrl + l / command + r | 清屏 |
ctrl + a | ctrl + a |
ctrl + e | 到行尾 |
ctrl + f/b | 前进后退 (相当于左右方向键) |
ctrl + p | 上一条命令 |
ctrl + r | 搜索命令历史 |
ctrl + d | 删除当前光标的字符 |
ctrl + h | 删除光标之前的字符 |
ctrl + w | 删除光标之前的单词 |
ctrl + k | 删除到文本末尾 |
ctrl + t | 交换光标处文本 |
Command + / | 查看当前终端中光标的位置 |
参考: