作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
简介
Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
Git 最初被Linus Torvalds开发出来用于管理Linux内核的开发。每一个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力,不依赖于网络和中心服务器。
Git的优缺点
优点:
- 可以离线工作。
- 适合分布式开发,强调个体。
- 便于协作,任意两个开发者之间可以很容易的解决冲突。
- 版本合并快捷简便。
- 速度快、灵活性高。
缺点:
- 资料少(起码中文资料很少)。
- 学习周期相对而言比较长。
- 不符合常规思维。
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
Git的常用命令
- git初始化操作
git init 把当前的目录变成git仓库,生成隐藏.git文件。
git remote add origin url 把本地仓库的内容推送到GitHub仓库。
git clone git@url/test.git 从远程库克隆
git add * 把x文件添加到暂存区去。
git commit –m "*" 提交文件 –m 后面的是注释。
- git 克隆分支
git clone xxx.git 最简单直接的命令
git clone xxx.git "指定目录" clone到指定目录
git clone -b branchname xxx.git clone时创建新的分支替代默认Origin HEAD(master)
- clone 远程分支
git clone 命令默认的只会建立master分支,如果你想clone指定的某一远程分支(如:dev)的话,可以如下:
1) 查看所有分支(包括隐藏的) git branch -a 显示所有分支
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/master
2) 在本地新建同名的("dev")分支,并切换到该分支
git checkout -t origin/dev 该命令等同于:
git checkout -b dev origin/dev
- 文件目录操作命令
mkdir * 创建一个空目录 *指目录名
pwd 显示当前目录的路径。
cat * 查看*文件内容
git rm * 删除**文件
- 查看命令
git status 查看仓库状态
git diff * 查看X文件修改了那些内容
git log 查看历史记录
git reflog 查看历史记录的版本号id(记录你的每一次命令,不论是否提交)
git log --pretty=oneline 如果信息量太多可以进行比较好的列表显示
- 版本回退
git reset –-hard HEAD^ 回退到上一个版本
git reset --hard HEAD~第几个 如果想回退到第3个版本,使用git reset –hard HEAD~3
git reset --hard 057d 回退到某一个具体的版本号
git push -f -u origin master 推送到远程github
- 撤销修改
git checkout file-name 恢复某个已修改的文件(撤销未提交的修改):
git revert HEAD 还原最近一次提交的修改:
git revert commit-id 还原指定版本的修改
- 分支管理
git branch 查看本地所有的分支
git branch -a 查看远程所有的分支
git branch name 创建分支
git branch –d dev 删除dev分支
git push origin --delete dev 删除远程的dev分支
git branch -m dev develop 重命名分支
git checkout –b dev 创建dev分支 并切换到dev分支上
git merge dev 在当前分支上合并dev分支代
git push origin zyf-dev 把当前新疆的zyf-dev分支推送到远程库(远程仓库没有给分支则会新建立该分支)
git checkout — * 把XX文件在工作区的修改全部撤销。
git checkout master 切换回master分支
git push --set-upstream origin dev 提交修改并创建远程分支dev
git remote prune origin 删除远程仓库不存在的分支
- tag相关操作
git tag 列出所有的tag
git tag name 打轻量标签 name
git tag -d name 删除本地的tag
git push origin --delete tag name 删除远程的tag
git show name 查看tag信息
git push origin name 将tag提交到远程
- 隐藏的文件
git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list 查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop 恢复文件的同时 也删除文件
- 查看远程库信息(git remote的用法)
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
git remote add name url 添加远程仓库
git remote rename oldname newname 重命名仓库
git remote rm 删除仓库
- 将远程分支拉取到本地
方法一:git checkout -b 本地分支名x origin/远程分支名x
方法二:git fetch origin 远程分支名x:本地分支名x
方法三:先创建本地分支x,再关联远程分支:git push --set-upstream origin 远程分支名x
- git pull操作
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并,基本的格式如下。
$ git pull <远程主机名> <远程分支名>:<本地分支名>
取回origin主机的next分支,与本地的master分支合并,需要写成下面这样
$ git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。
$ git fetch origin
$ git merge origin/next
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。
比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,
也就是说,本地的master分支自动”追踪”origin/master分支。
Git也允许手动建立追踪关系。
git branch --set-upstream master origin/next
上面命令指定master分支追踪origin/next分支。
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
$ git pull origin
- git 设置大小写敏感
Windows上的Git默认是大小写不敏感的,这样多平台写作就可能会出现问题。
Win上的Git设置为大小写敏感的命令如下:
git config core.ignorecase false
- git 设置忽略文件或文件夹权限修改
git config core.filemode false
- 创建追踪分支
不带任何参数的git push,默认只推送当前分支,这叫做simple方式。
此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。
Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。
如果要修改这个设置,可以采用git config命令。
$ git config --global push.default matching
$ git config --global push.default simple (最好使用这种方式)
//在使用 git branch 命令时加上 '--track' 参数, 来手动创建一个追踪分支
$ git branch --track master origin/master
- 切换git 命令提示中文到英文
// ubuntu装的git不知道怎么就出现全中文的提示,不太好,果断切换到中文了,切换方法如下:
// 1:写入
echo "alias git='LANG=en_GB git'" >> ~/.bashrc
// 2:生效
source ~/.bashrc
- git 删除未添加到版本中的文件或者文件夹
git checkout 只能回退在版本中的修改或者删除, 对于新添加的文件是没有作用的,
也就是说, 新建的文件或者文件夹是:Untracked files, 要删除或者清理掉这些文件,需要使用 git clean 命令:
// 删除 untracked files
git clean -f
// 连 untracked 的目录也一起删掉
git clean -fd
// 连 gitignore的untrack 文件/目录也一起删掉 (一般这个是用来删掉编译出来的 .o一类的文件)
git clean -xfd
// 在使用清理 git clean之前,建议加上 -n 来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
- 创建ssh秘钥
ssh-keygen -t rsa -C "your_email@example.com“ 生成新的SSH key
cat ~/.ssh/id_rsa.pub 查看本地ssh
ssh-add ~/.ssh/id_rsa 将SSH key 添加到 ssh-agent
eval "$(ssh-agent -s)" 使用上述命令报错时使用此命令解决
ssh -T git@github.com 验证key
- 配置用户名和邮箱
git config --global user.name "xxx" 设置用户名
git config --global user.email xxxxxx@qq.com 设置邮箱
Git 安装
解决 git pull/push 每次都要输入用户名密码
出现这种问题的原因是因为使用 http 的方式拉取代码
方法一:在本地生成包含 git 账号和密码的文件
- 先按提示输入用户名和密码
- 接着执行
git config --global credential.helper store
方法二:切换 git 的拉取方式,将 http 改为 ssh 的方式
- 查看 clone 地址:
git remote -v
- 移除 http 的方式:
git remote rm origin
- 换成 ssh方式:
git remote add origin [git 地址]
- 查看 clone 地址:
git remote -v