开源的分布式版本控制系统
参考
廖雪峰 Git教程
Git 官方文档
介紹好用工具:BFG Repo-Cleaner
设置 git config
显示config
--list 打印设置
1 | git config --list --style #查看系统设置 |
--get [config name] 打印单个参数
1 | #打印所有者邮箱 |
--local 当前所在项目
--global 当前用户(常用)
--system 系统设置
设置生效的优先级 local > global > system
修改config
git config 参数名 "参数值"
1 | git config user.name "Aaron" |
删除config
git --unset 参数名
1 | git config --local --unset user.name |
创建Git仓库
git init
提交文件
提交到暂存区
git add[filename]
1 | git add README.md |
注:不建议使用git add *
提交到本地仓库
git commit -m "commit explain"
1 | git commit -m "add README.md" |
提交到远程仓库
git push [repository name] [branch name]
1 | git push origin master |
显示记录
git log 显示提交记录
git reflog 显示操作记录
git status 显示文件信息(未提交/已提交到缓存区等...)
比较文件差别
git diff 显示所有未提交到缓存区文件的修改
git diff --staged [filename] 比较缓存区文件与最后一次提交文件的区别
1 | git add README.md |
注 "git diff --staged"和"git diff --cached"一样
撤销
撤消暂存区文件(不还原工作区文件)
git reset HEAD [filename]
1 | # 撤消所有提交到缓存区的文件 |
HEAD 指向当前操作的commit
重新提交(commit)
git commit --amend
当提交错误时,可用--amend将暂存区文件覆盖上次提交.
1 | git add |
如果提交描述写错了,还可以用该命令修改
git commit --amend -m "commit info"
还原文件
还原到暂存区版本
文件被提交到暂存区之后,又对文件进行了修改.如果想还原到暂存区版本,使用命令
git checkout -- [filename]
1 | git checkout -- . |
注
当文件被提交到暂存区时,"checkout -- "恢复文件到暂存区版本
当文件没有被提交到缓存区,"checkout -- "恢复文件到上一次提交版本(commit)
还原到最后一次commit
git reset --hard HEAD [filename]
1 | git reset --hard HEAD README.md |
还原到以前的commit
reset
git reset --hard [edition hash]
1 | # 退回到上一版本 |
注
- --hard 还原本地文件,不加hard不会还原本地文件
- 可用git log命令查看版本序号
- Git使用哈希值作为文件索引
checkout
git checkout [edition hash]
1 | git checkout HEAD^ |
区别 "checkout HEAD^"会创建临时分支(切换到其他分支不会保存),原分支不作任何改动.
忽略文件
在项目根目录下新建文件".gitignore",把需要忽略的文件写在里边
1 | # 新建.gitignore |
如果更新".gitignore"前文件已被提交到缓存区,需先清除缓存区内的相应文件再提交
删除文件
git rm [file name]
1 | git rm "README.md" |
注 不要使用"git add *"提交删除更改,应用"git add ."(个人在windows下测试)
"."和"*"的区别
彻底删除某个文件
bfg-repo-cleaner专门用于删除Git数据,使用前需安装java
官网
1 | # 删除README.md |
分支
显示所有分支及当前所在分支
git branch
创建分支
git branch [branch name]
1 | git branch dev |
新分支内文件和当前所在分支相同
切换分支
git checkout [branch name]
1 | git checkout dev |
返回上一分支
git checkout -
合并分支
merge
git merge [branch name]
1 | # 合并dev分支到master,该命令需在master分支下输入 |
rebase
git rebase
删除本地分支
git branch -d [branch name]
1 | git branch -d dev |
如果分支有提交且未合并,需使用"-D"强制删除
1 | git branch -D dev |
删除远程分支
git push <远程名> :<分支名>
1 | git push origin :dev |
注意(:)号的位置,不要写成"git push origin: dev"
分支合并冲突
当文件在两个分支中进行了不同的修改时,会产生合并冲突
1 | git checkout dev |
合并失败后,Git会将冲突代码以下列形式标记
1 | cat README.md |
手动修改代码后提交即可
1 | git add README.md |
查看合并分支
git log --graph --pretty=oneline --abbrev-commit
注 rebase的合并和merge类似
1 | git add. |
远程库
查看远程库
git remote
#显示仓库url
git remote -v
添加远程库
git remote add [repository name] [repository url]
1 | git remote add origin git@github.com:Aaron-Bird/studyGit.git |
拉取远程库更新
fetch
git fetch [remote name] [branch name]
和pull的区别是,fetch不会自动合并(merge)代码,相对pull更安全
1 | # 拉取远程库所有分支的更新 |
pull
git pull [repository name] [branch name]
1 | git pull origin master |
重命名远程库
git remote rename [old name] [new name]
1 | # 重命名远程库origin为backup |
删除远程库
git remote remove [repository name]
1 | git remote remove origin |
推送到远程库
git push [repository name] [branch name]
1 | git push origin master |
可用"-r"强制推送代码到远程库
1 | git push -r origin master |
git clone git@github.com:Aaron-Bird/studyGit.git
1 | 注 clone的库会自动命名为origin |
git branch -v
#以origin/dev为基础,创建dev分支
1 | git branch dev origin/dev |