只为记录,以后尽量按照Git的官方帮助文档写!
clone
- 从远程库中克隆到本地目录
git clone <版本库地址> <本地目录>
//在当前目录创建新一个文件夹文件夹
mkdir <文件夹名称>
//进入到这个文件夹
cd <文件夹名称>
git clone <版本库地址>
init
此命令用于已有项目,然后想用Git管理项目
- 进入到项目目录(例如在桌面)
cd ~/desktop/xxx
- 初始化仓库
git init
- 将所有文件添加到索引库
git add .
- 提交代码并填写提交信息
git commit -m "xxxx"
- 添加远程呢很难过Git地址
git remote add origin <地址>
- 如果网页创建仓库存在xxx.md文件或其他的文件,需要先将远程库的文件更新下来才能将本地项目推送到远程,如果仓库是空则忽略这个步骤
git pull --rebase origin master
- 将项目推送到远程仓库
git push -u origin master
config
此命令用于获取并设置存储库或全局选项。这些变量可以控制Git的外观和操作的各个方面。
- 配置用户名和密码(当安装Git后首先要做的事情,因为每次提交Git都会使用该信息,它被永远嵌入到了你的提交信息中)
git config --global user.name "xxx"
git config --global user.email "xxx"
- 如果希望在一个特定的项目中使用不同的名称和e-mail地址,可以在该项目中运行该命令而不要
--global
选项
git config user.name "xxx"
git config user.email "xxx"
- 配置编辑器(默认vim)
git config --global core.editor xxx
- 配置比较工具
//Git可以接受kdiff3、tkdiff、meld、xxdiff、emerge、vimdiff、gvimdiff、ecmerge和opendiff作为有效的合并工具。也可以设置一个客户端的工具。
git config --global merge.tool xxx
- 检查配置
git config --list
git config {key}
- 添加配置项(
section
,key
,value
一个都不能少)
git config [--local|--global|--system] --add section.key value
- 删除配置项(
section
,key
一个都不能少)
git config [--local|--global|--system] --unset section.key
add
此命令将要提交的文件的信息添加到索引库中(将修改添加到暂存区)
- 提交所有变化
git add -A
- 提交被修改(modified)和被删除(delete)文件,不包括新文件(new)
git add -u
- 提交新文件(new)合被修改(modified)文件,不包括被删除(delete)文件
git add .
- 提交指定/文件
git add <文件路径>
- 查看所有修改过或已删除文件但没有提交的文件
git add -i
Test1ViewController.m
表示已经被执行过git add
操作,待提交。即已添加到索引库中。
project.pbxproj``Test2ViewContoller.h``Test2ViewController.m
表示已处于tracked
下,已经被修改了,但是还没有执行git add
操作,即还没有添加到索引库中。
通过编号
或首字母
或全称
加回车执行子命令(例如:3
、r
、revert
)
执行命令后,Git会列出文件,输入文件编号加回车则执行子命令操作,再次回车退出子命令。
1.status
子命令:查看文件状态都,与git add -i
相似。
2.update
子命令:将文件加入到索引库中。
3.revert
子命令:把已添加到索引库中的文件从索引库中移除。
4.add untracked
子命令:把没有被git管理的文件添加到索引库中。
5.patch
子命令:补丁这一条没有看懂
6.diff
子命令:比较索引库中的文件与原版的差异。
7.quit
子命令:退出git add -i
命令系统。
8.help
子命令:查看git add
的帮助文档,也可以通过git add -h
进入。
mv
-
name1
重命名为name2
(文件name必须真实存在)
git mv name1 name2
- 移动文件到指定目录下(文件与目录必须真实存在,并且在文件夹内部存在同名文件)
git mv <文件> <文件夹目录>
reset
- 回退到上个版本,只保留源码,回退commit和index信息
git reset --mixed
git reset
- 回退上个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset --soft
- 彻底回退到上个版本,本地的源码也会变为上一个版本的内容
git reset --hard
- 回退所有内容到上一个版本
git reset HEAD^
- 回退README.md这个文件的版本到上一个版本
git reset HEAD^ README.md
- 向前回退到第3个版本
git reset --soft HEAD~3
- 将本地的状态回退到和远程的一样
git reset --hard origin/master
- 会退到某个版本
git reset xxx
- 回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit
git revert HEAD
rm
- 删除文件
git rm xxx
- 删除文件夹
git rm -r xxx
- 将文件从索引库中移除,对文件本身不做任何操作
git rm --chcahed xxx
bisect
用来查找哪一次代码提交引入了错误。
它的原理很简单,就是将代码提交的历史,按照两分法不断缩小定位。所谓"两分法",就是将代码历史一分为二,确定问题出在前半部分,还是后半部分,不断执行这个过程,直到范围缩小到某一次代码提交。
- 启动查错(必须在最上层路径)
1、 起点是没有错误的提交指针,
2、 终点是最近一次的HEAD
。当然,指定其他范围也可以。
git bisect start <终点> <起点>
3、执行命令后,代码库会切换到这段范围的中间那次提交。
4、测试项目,没有问题
git bisect good
5、测试项目,有问题
git bisect bad
6、接下来,不断重复这个过程,直到成功找到出问题的那一次提交为止。这时,Git 会给出如下的提示。
xxx is the first bad commit
7、退出查错
git bisect reset
- 根据指针查找提交代码,修改Bug。
grep
检索当前目录下的文件中的内容
- 检索指定关键字
git grep www
- 检索指定关键字在哪一行
git grep -n www
- 检索指定关键字在哪些文件中
git grep --name-only www
- 统计每一个文件中包含关键字的行数
git grep -c l
- 在指定的commit中检索关键字
git grep xxx <指针>
git grep www HEAD #在最近一次提交中检索
- 与条件检索
git grep -e www --and -e good
- 或条件检索
git grep -e www --or -e bad
- 与或组合条件检索
git grep -e www \( -e bad -e good \)
- 全匹配检索
git grep --all-match -e www --or -e bad
1、全匹配和普通匹配的区别在于,全匹配必须在全文满足指定的条件。
2、比如上面的例子中,如果是全匹配,那么必须在文件中,同时具有www
和bad
(没要同一行)。
3、而普通匹配,只要在文件中具有www
或者bad
中的一个即可。
log
如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者、提交日期、和提交说明
如果记录过多,则按Page Up、Page Down来控制显示
按q退出历史记录列表
- 按补丁显示每个更新间的差异
git log -p
- 尽在已修改的提交信息后显示文件清单
git log --name-only
- 显示ASCII图形表表示的分支合并历史
git log --graph
- 一行显示,只显示哈希值和提交说明
git log --oneline
- 查看文件某个范围的提交记录
git log -L <起始行数>,<结束行数>:<文件名>
show
- 显示文件
git show <哈希值/tag版本>
- 查看哈希值(需要到达文件的目录或添加文件路径)
git hash-object <文件名>
status
- 显示工作目录和暂存区的状态
git status
branch
- 查看当前有哪些分支(*表示当前所在分支)
git branch
- 新建分支
git branch xxx
- 查看本地和远程分支
git branch -a
- 查看远程分支
git branch -r
- 修改分支名
git branch -m <old> <new>
- 删除远程分支
git push origin --delete xxx
- 删除本地分支
git branch -D xxx
checkout
- 检出分支
git checkout xxx
- 新建分支
git checkout -b xxx
- 从远程取得本地分支
git checkout -b xxx origin/xxx
- 放弃当前文件的修改
git checkout <分支名> <文件名>
commit
- 提交
git commit -m xxx
git commit -a -m xxx
git -am xxx
diff
- 比较当前文件和未提交的文件存在哪些差异
git diff <file>
- 查看所有文件和未提交的差异
git diff
- 比较已经提交文件和上次提交之间的差异
git diff --cached
git diff --staged
- 显示下次提交会提交什么内容
git diff HEAD
- 比较两个分支最新提交
git diff <分支1> <分支2>
git diff <分支1>..<分支2>
- 仅仅比较统计信息
git diff --stat
- 查看当前分支和其他分支的差别
git diff <分支>
- 比较两次提交的差异
git diff <指针1> <指针2>
merge
- 合并分支到当前分支
git merge <分支1> <分支2>
mergetool
- 下载Beyond Compare 密码:1anl
-
打开Beyond Compare
- 编辑配置文件
git config --edit --global
- 将下方文本粘贴进去
[diff]
tool = bcomp
[difftool "bcomp"]
cmd = \"/usr/local/bin/bcomp\" \"$LOCAL\" \"$REMOTE\"
[difftool]
prompt = false
[merge]
tool = bcomp
[mergetool]
prompt = false
[mergetool "bcomp"]
cmd = \"/usr/local/bin/bcomp\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
- 合并不再生成备份文件
git config --global mergetool.keepBackup false
- 使用方法
git difftool <指针>
git difftool <分支名>
git mergetool
如果difftool
需要对比的文件比较多,在你关闭Beyond Compare的时候它会再次打开,不要担心,这不是bug,这是主动打开下一个有差异的文件。不喜欢这样的话可以执行git config --global difftool.prompt true
,这样的话每次弹出都会在终端询问一遍。
rebase
- 合并分支
当前分支为dev分支checkout的分支,dev和当前分支都有修改,将当前分支的commit执行dev新的commit
git rebase <dev>
此过程可能会出现冲突
解决冲突后执行git add .
将所有修改添加到索引库
完成修改后执行git rebase --continue
,git会继续执行rebase操作
或者可以执行git rebase --abort
来终止rebase操作,并且分支会回到 rebase 开始前的状态。 - 合并提交
//合并最近四次commit
git rebase -i HEAD~4
//合并提交从最近到指定commit(xxx为哈希值,可用`git log`指令查看哈希值)
git rebase -i xxx
//如果出现冲突解决办法如上一条操作
'pick':`生成一条提交`
`fixup`:`放弃本此提交记录`
`squash`:`合并本次提交记录到上一条`
- 如果终端出现闪退
git rebase --edit-todo
tag
- 创建标签
git tag -a xxx -m "xxx"
- 查看所有标签
git tag
- 检索标签
git tag -l 'xxx'
- 删除标签
git tag -d xxx
- 创建轻量级标签
git tag xxx
- 后期加注标签
git tag -a xxx <指针> -m "xxx"
- 推送标签到远程
git push origin xxx
- 推送所有标签到远程
git push origin --tags
fetch
- 更新所有分支
git fetch
- 更新具体分支
git fetch <远程主机名> <分支名>
最后可用用merge
和rebase
命令合并远程分支到本地分支。
pull
- 拉取远程与本地分支合并(如果本地分支为当前分支
:
后则可以省略)
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master:dev
push
- 将当前分支推送到远程
git push
- 将本地分支推送到
origin
主机的远程分支(无远程分支则会新建一个远程分支)
git push origin xxx
- 推送指定分支到远程
git push origin xxx:xxx
1、如果省略本地分支
git push origin :xxx
3、表示删除指定远程分支,因为这等同于推送一个空的分支到远程
git push origin --delete xxx
- 推送所有本地分支到远程
git push --all origin
stash
- 储藏修改
git stash
- 储藏修改并添加提交信息
git stash save "xxx"
- 查看所有储藏
git stash list
- 恢复储藏
1.apply
恢复后不会在存储库中删除本条记录,pop
回复后会在存储库中直接删除本条记录
2.指针格式stash@{1}
,如果省略指针则表示恢复最近一条
git stash apply/pop <指针>
- 检查储藏修改文件
1.指针格式stash@{1}
,如果省略指针则表示查看最近一条
2.后面加-p
或--patch
则可以查看详情
git stash show <指针>
- 删除储藏
git stash drop <指针>
- 清空储藏
git stash clear
blame
- 查看文件每行代码是谁修改的
git blame xxx
- 查看文件某个范围
git blame -L <起始行数>,<结束行数> <文件名>
git blame -L <起始行数>,+<显示行数> <文件名>
clean
批量删除未添加到索引库的文件
n
查看
f
文件
d
文件夹
- 查看当前目录下哪些文件将要被删除
git clean -n
- 删除当前目录下的文件
git clean -f
- 删除指定目录下的文件
git clean -f <路径>
- 删除文件和文件夹
git clean -fd
每次删除之前要加n
查看下哪些要被删除,谨防删错。
reflog
- 查看所有参考日志(定位到想要回退的版本
git reset --hard HEAD@{n}
)
git reflog <分支> <show>
- 查看5条参考日志
git reflog <分支> <show> -5
- 删除某一条参考日志
git reflog delete HEAD@{n}
git reflog expire
和git reflog exists
这两条命令还没有研究明白