GIT
下载与安装
下载:下载msysGit_…exe
安装:傻瓜式安装
验证:开始菜单 → Git → Git Bash 如果弹出命令框,Git安装成功
使用:指定git仓库配置(统一)
弹出的命令框输入命令:
git config --global user.name “tangheng”
git config --global user.email "[email protected]"
GIT常用命令
git init
把当前的目录变成可以管理的git仓库,生成隐藏.git文件
git clone [path]
从远程库中克隆,repo会以path最后一个斜线后面的内容命名创建一个文件夹
git clone [path] newname 从远程库上克隆,根目录为newname
git log [params]
params参数 | 含义 |
---|---|
空 | 显示全部日志信息摘要 |
-[number] | 显示number条日志 |
[branch-name] | 显示特定分支的log |
[branch1] 1 | 显示在分支1但不在分支2上提交的日志。"^"表示排除 |
-p [commitId] | 显示指定commit的快照,不填,默认最新commit |
-s | 待完善 |
–oneline | 每条日志拼接到一行 |
–graph | 图形化表示分支合并历史 |
–decorate | 显示日志的tag信息 |
–author [name] | 显示指定作者的提交历史(注意大小写) |
–param [commitId] | param:since,before,until,after。按条件筛选log(包括自己) |
–no-merges | 排除已merge的commits |
–grep [key] | 根据key值过滤commit信息 |
–stat [commitId] | 显示指定commit改动对比信息,不填,默认最新commit |
git add [params]
添加文件到暂存区去,可递归,多次添加操作
git diff [params]
不加参数
比较工作目录中当前文件和暂存区域快照
[filename]
比较指定文件差异
–cached
已暂存的文件和上次提交时的快照之间的差异
HEAD
比较工作目录和上次提交之间所有的改动
[version tag]
比较工作目录和指定版本间的改动
[branchA][branchB]
比较两个分支,返回一个由A到B的patch
[branchA]…[branchB]
比较两个分支差异,等于git diff $(git merge-base [branchA]·[branchB]) [branchB]
git commit [params]
-m [commit-message]
提交文件,带提交信息
–amend
修改最近一次commit信息,不修改文件内容
git reset [commitId]
HEAD
将add进暂存区的文件退出来
HEAD --[filename]
将add进暂存区的指定文件退出来
–soft [commitId]
取消了commit内容。等于git reset --mixed commitId + git add
–mixed [commitId]
改变提交记录,文件不变。取消了commit和add内容
–hard [commitId]
还原上次提交的状态。包括commit,add,工作目录
–hard HEAD^
回到上一个版本,git --hard HEAD~[number] 回退number个版本
soft (commit) < mixed (commit + add) < hard (commit + add + local working)
git revert [params]
HEAD
撤销最近一次的提交
[commitId]
撤销指定commitId的提交
git rm [params]
[filenam]
将指定文件从暂存区和工作目录删除
–cached [filename]
将指定文件从暂存区删除,但保留在工作目录。功能上等同于git reset HEAD
git clean [params]
无参数
从工作目录中移出没有纳入管理的文件
-df
-d表示同时移除,-f表示强制执行,不加-f,命名无效
git stash [params]
无参数
将当前改动文件(暂存区,工作目录,不包括Untracked文件)压入一个栈,缓存起来
list [param]
显示栈的列表
apply [param]
取出栈中内容,应用于当前工作目录
drop [param]
删除指定项目的栈内容
clear
删除所有项目的栈内容
pop [param]
取出栈中内容,应用于当前工作目录,同时删除栈
git branch [params]
无参数
列出分支
[branch-name]
创建分支
-v
查看当前分支的最后一次提交
-d [branch-name]
删除分支
git checkout [params]
[branch-name]
切换到指定分支
-b [branch-name]
创建并切换分支
–[filename]
使用HEAD中最新内容替换工作目录中文件,操作不可逆,暂存区及新文件不受影响
git tag [params]
-a [tag-message]
永久性书签
push和fetch操作时,tag相关操作使用"–tags"选项
git remote [params]
无参数
列出远程仓库别名列表
-v
查看每个别名对应的url
add [alias] [url]
关联一个远程库
rm [alias]
删除指定alias
rename [old-alias] [new-alias]
重命名
set-url [alias] [url]
更新url
可以加上—push和fetch参数,为同一个别名set不同的存取地址
git fetch [params]
[alias]
取某一个远程repo
–all
取全部repo
git reflog
查看历史记录的版本号id,[email protected]{0}代表HEAD当前的值,[email protected]{3}代表HEAD在3次变化之前的值
git会将变化记录到HEAD对应的reflog文件中,其路径为.git/logs/HEAD, 分支的reflog文件都放在.git/logs/refs目录下的子目录中
其他命令
git rebase
git pull 从远程仓库获取并尝试合并到当前分支
git mv 移动文件
mkdir XX (创建一个空目录 XX指目录名)
pwd 显示当前目录的路径
git status 查看仓库状态
cat XX 查看XX文件内容
git push –u(只首次用-u) origin master 把当前master分支推送到远程库
git push origin master 把master分支推送到远程库对应的远程分支上
git merge [alias]或[branch] 把远程分支或指定分支merge到当前分支
VIM编辑器使用
Ctrl+c 跳出当前操作,进入等待命令输入状态
Ctrl+u 向上翻半屏
Ctrl+d 向下翻半屏
Ctrl+b 向上翻一屏
Ctrl+f 向下翻一屏
Esc 编辑模式切换到命令模式
: 行号光标跳转到指定行的行首
???? 光标跳转到最后一行的行首
x或X: 删除一个字符,x删除光标后的,而X删除光标前的
D 删除从当前光标到光标所在行尾的全部字符;
dd 删除光标行内容
ndd 向下删除n行,包括本行
nyy 将当前行及其下n行的内容保存到寄存器
p 粘贴文本,将缓存区内容粘贴到当前光标所在位置的下方
P 粘贴文本,将缓存区内容粘贴到当前光标所在位置的上方
/字符串 文本查找,从光标位置开始向后查找指定字符串,加亮显示
?字符串 文本查找,从光标位置开始向前查找指定字符串,加亮显示
a,bs/F/T 替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,"s/"表示进行替换操作
a 在当前字符后添加文本
A 在行末添加文本
i 在当前字符前插入文本
I 在行首插入文本
o 在当前行后面插入一空行
O 在当前行前面插入一空行
命令模式
ZZ 保存并退出
:wq 存盘并退出
:w 存盘
:w! 强制存盘
:q 退出vi
:q! 强制退出vi
:e文件名 打开并编辑文件
:n 如同时打开多个文件,则继续编辑下一个文件
:f 显示当前的文件名、光标所在行的行号以及显示比例
:set number 在最左端显示行号
:set nonumber 在最左端隐藏行号
操作方式
c 进入编辑状态
shift + ZZ 进入命令输入状态
操作案例
创建版本库:git init
1 添加文件到版本库中
创建文件readme.txt → 增加一行内容:111 → 添加到缓存区:git add readme.txt → 提交:git commit -m “readme.txt提交”
add:添加到本地缓存
-m “commit注释”
2 在readme.txt文件中增加内容
添加:222,此时会显示:modified:readme.txt。表示readme.txt已经被修改了,但是未提交
3 查看readme.txt修改内容
git diff readme.txt。查看本地工作目录与本地仓库的区别
4 添加到缓存区
git add readme.txt → 提交:git commit -m “增加内容222”
5 版本回退到增加内容222的版本
readme.txt增加一行内容:333
添加到缓存区:git add readme.txt
提交:git commit -m “增加内容333”
退回到指定版本(commit记录和文件内容均改变):git reset --hard HEAD^
^个数代表回退版本的数量
//git -soft commit_id 只撤销记录,不撤回代码
6 恢复指定版本修改的内容
6fcfc89为"增加内容333",git reset - hard 6fcfc89
7 撤回添加的内容
readme.txt增加内容555,此时发现此次增加的内容有误,需撤回。
第一种方法:删除本地修改的内容
第二种方法:git checkout – readme.txt。丢弃工作区修改,把未添加到缓存区的文件内容撤销。其实是将本地仓库中指定文件状态同步到工作区
8 删除本地库的指定文件
删除工作区文件,然后commit
9 工作区文件删除了,需恢复
git checkout – b.txt,恢复b.txt文件
远程仓库
创建
注册github账号:创建SSH Key. c\用户\tangheng.ssh目录下查看是否有id_rsa和id_rsa.pub两个文件。如果有,跳过此步。如果没有,打开命令行:ssh-****** -t rsa –C “[email protected]”
// id_rsa,id_rsa.pub分别是私钥和公钥
登录github → 打开settings → SSH Keys → Add SSH Key → 输入title → Key文本框里粘贴id_rsa.pub文件的内容 → Add Key
添加远程库
在github上创建新的Git仓库:登录github → 右上角"new repository" → Repository name填入testgit → Create repository
将本地已有的仓库关联到github上指定git仓库
本地testgit仓库下运行命令:
git remote add origin https://github.com/tugenhua0707/testgit.git
git push -u origin mster //第一次推送加"-u"
从远程库克隆
登录gitHub → 右上角"new repository" → 输入名字"testgit2" → 勾选"…with a README"(自动生成README.md文件)→ Create repository → 在本地问价夹下输入命令: https://github.com/tugenhua0707/testgit2
创建与合并分支
创建并切换到名为"devname"的分支并切换git checkout -b devname = git branch devname + git checkout devname
切换到指定分支
git checkout devname //主分支名:master
将指定分支上的内容合并到master上
git merge devname
合并某分支到当前分支
git merge name // 默认Fast forward模式,删除分支后,会丢掉分支信息
git merge --no-ff -m “注释信息” devname // 禁用Fast forward模式
bug分支
隐藏工作现场,将现有分支上修改的内容隐藏:git stash
创建临时404分支:git checkout -b issue-404
修改内容后按上述方法合并到master分支上
恢复工作现场:git stash pop = git stash apply + git stash drop//恢复并删除内容
拉取指定版本
1 git clone最新版本
2 show log找到指定版本,右键"Create branch at this version",输入branch名字:new branch
3 Switch/checkout…,选择"new branch",ok
-
branch2 ↩︎