Git简介
在我们的认知范围Git和SVN都是对于代码托管的工具,那么这两者又有什么不同呢?
Git
是世界上先进的「分布式的版本控制系统」,而SVN
是「集中式的版本控制系统」,SVN对于版本的管理集中于中央服务器中,而Git对于版本的管理可以在本地。
SVN管理的模式从SVN服务器中拉取代码,然后开始自己的开发,开发完后再向SVN服务器提交代码,所以集中式的版本管理,需要联网才能进行,一旦没网就没办法向SVN服务器提交代码。
而Git是分布式的版本管理,每个开发者的本地都会有完整的版本库,不需要来联网,也能进行版本的管理和代码的提交,每个开发者都可以再本地进行提交代码、查看版本、切换分支等操作。
Git常用命令
设置用户名和邮箱标识:
git config --global user.name “xxxxxx”
git config --global user.email “xxxxxxxx”git init //初始化仓库
git init [project-name] //新建一个目录,将其初始化为Git代码库git add [file1] [file2] //添加指定文件到暂存区
git add [dir] //添加指定目录到暂存区,包括子目录
$ git add . //添加当前目录的所有文件到暂存区git commit –m “说明” //将文件提交到仓库
git status //查看文件状态
git diff //查看文件修改的内容git mv a.txt b.txt //把a.txt改名为b.txt
git log //查看历史记录
git log --pertty=online //简略查看历史记录git reset --hard HEAD^ //回退到上一个版本
git reset --hard HEAD 版本号 //回退到对应的版本号cat xxx //查看文件内容
git checkout -- xxxx //丢弃工作区的修改(就是文件目录下的)git remote add origin githubAddress //链接远程仓库
git push -u origin master //把本地仓库的分支master推送到github上去(第一次链接github的时候)
git push origin master //第一次链接完成后的向github上提交代码git clone githubAddress //从github上克隆代码
git checkout -b dev //表示创建并切换dev
git checkout master //切换到master分支
git branch //查看所有分支
git branch -d dev //删除dev分支
git merge name //合并name分支到当前分支
使用
1.Git安装
Git可以安装在Windows
或者Linux
,安装在Windows相信大家都会,基本就是下载软件,然后傻瓜式操作,再Windows安装后,就会有Git GUI Here
以及Git Bash Here
。
Git Bash Here
就是我们用来敲命令的窗口,打开它就可以敲关于Git的命令进行进行操作。
Windows的Git下载地址:https://git-scm.com/downloads,在这里下载最新版的进行安装即可。
下面我们来说一下Git再Linux的安装过程,要在安装Git其实也非常简单,可以直接使用yum源进行安装,一句命令就搞定了:
sudo yum install git
2.配置git
安装完Git后就开始对Git进行配置操作,配置自己用户名和Email,配置的命令如下:
2.1 初始化
git init
#或
git clone ssh://user@domain.com/repo.git
2.2 配置 git config
git 配置文件存在三个位置:
- /etc/gitconfig : 含每个用户及仓库配置。用 git config --system 时,会从此文件读写配置变量。
- ~/.gitconfig 或 ~/.config/git/config :只对当前用户。 --global 选项让 Git 读写此文件。
- 当前仓库的 .git/config,针对该仓库。
每个级别覆盖上级配置, .git/config
会覆盖 /etc/gitconfig
配置。
# 显示当前设置及其来源
git config --list --show-origin
#查看global类型的配置情况
git config --global --list
# 设定身份
git config --global user.name <your name>
git config --global user.email <your email>
# 首选编辑器
git config --global core.editor vim
# 证书缓存
# WINDOWS
git config --global credential.helper manager
# LINUX (超时时间——单位秒)
git config --global credential.helper "cache --timeout=3600"
# MACO
git config --global credential.helper osxkeychain
2.3 配置SSH
Git
服务大部分用 SSH
公钥认证,创建SSH
公钥方法。
默认用户 SSH
密钥存在 ~/.ssh
目录。 进该目录查看密钥:
ls ~/.ssh
authorized_keys2 id_dsa known_hosts
config id_dsa.pub
如有id_dsa
、id_dsa.pub
说明已生成,后面步骤可省
id_dsa 或 id_rsa 命名的文件,其中一个带 .pub 扩展名。 .pub 文件是公钥,另个是私钥。
$ ssh-keygen
# 一路回车回车即可,以下为输出内容,仅供参考
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xFntIEM+aKyuc5dJmCvq1xnccqCaMAcK3kBClYXc/J0 root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|..o.*. .. .. |
|.. + + +oo. . |
|o = Bo.o |
|o. + o E . |
|+.o +oo S |
|+..+o+.o |
|.oo oo=o |
| ooooo+ |
|ooo+ . |
+----[SHA256]-----+
首先 ssh-keygen 确认密钥存储位置(默认 .ssh/id_rsa),然后它要求输入两次密钥口令。如果不想在使用密钥时输入口令,可留空。
2.4 别名
# 创建别名
git config --global alias.<alias-name> "<git command>"
# 使用别名
git <alias-name> <more optional arguments>
常用 别名:
# 撤销上次提交
git config --global alias.undo "reset --soft HEAD^"
# 将暂存区更新到上次提交 (不改变提交信息)
git config --global alias.amend "commit --amend --no-edit"
# 压缩的状态输出
git config --global alias.st "status -sb"
# 用 GRAPH 为日志着色
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"
# 删除所有已合并分支
git config --global alias.rmb "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d"
# 贡献排行
git config --global alias.rank "shortlog -n -s --no-merges"
# 最爱的 git 别名
alias g='git'
alias glog='git log --oneline --decorate --graph'
alias gst='git status'
alias gp='git push'
alias ga='git add'
alias gc='git commit -v'
alias yolo='git push --force'
# 每周站会汇报工作时用
git-standup() {
AUTHOR=${AUTHOR:="`git config user.name`"}
since=yesterday
if [[ $(date +%u) == 1 ]] ; then
since="2 days ago"
fi
git log --all --since "$since" --oneline --author="$AUTHOR"
}
#其他
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
2.5 gitignore
.gitignore 忽略文件或目录,不纳入版本控制。
推荐 常用模板,如:Java、Nodejs、C++ 的模板等。
3.分区
git commit
常见姿势
git commit --amend --no-edit
git commit --no-verify -m "xxx"
git commit -m "xxx"
git commit -t templateFile
git commit -F
# 编辑上次提交
git commit --amend -m "更好的提交日志"
# 在上次提交中附加些内容,保持提交日志不变
git add .&& git commit --amend --no-edit
# 空提交 —— 重新触发 CI 构建
git commit --allow-empty -m "chore: re-trigger build"
3.1 工作区
提交
##### 工作区
git add [-u][-p file] .|filename
## -u 添加被跟踪的的变化到暂存区
## -p 添加目录内到某些改动到暂存区
清除工作区
git clean -nfd
## -n 预览删掉的文件,但不执行删除操作(强烈推荐)
## -f 强制删未 untracked 文件(含.gitignore文件但不含.gitignore规则文件/目录),且无法恢复
## -d 删掉未 untracked 工作区目录
## -x 删除包含在.gitignore里的规则文件/目录
查看
git status
## -sb ,-s 短显示,-b 分支
## --show-stash
注意:执行 git status
和 git branch -avv
查看仓库状态和分支状态
3.2 暂存区 cached
提交
git commit [--amend] -m [-a] 'message'
## -m 提交到仓库的备注信息
## --amend 编辑上次提交信息
## -a 对已跟踪文件无需add,提交到仓库
# 在上次提交中附加一些内容,保持提交日志不变
git add . && git commit --amend --no-edit
# 空提交,用来重新触发 CI 构建
git commit --allow-empty -m "chore: re-trigger build"
清除暂存区
git rm [-n] [-r] [-f] [--cached] [filename|dirname|.]
## -n 预览删除暂存区文件/目录
## -r 递归删除暂存区目录
## --cached 仅删除暂存区文件或目录,保留工作区
## -r --cached 删除暂存区文件/目录,保留工作区,等同 git reset -- fielname
## -f 强制删除源文件(即保存在工作区部分)
## -f [filename|.] # 删除暂存区和工作区的文件,等于 git rm --cache filename && git clean -f filename
修改 commit 信息
Commit 不可变。但可用新 commit 覆盖原始 commit,请勿在已推送的 commit 中用它。
git commit --amend -m "<new commit message>"
3.3 仓库区/版本区
提交
git push #数据从版本库中发送到远程仓库
#更新本地
git pull #从远程代码库拉取到本地仓库
git fetch origin
git checkout master
git reset --hard origin/master
清理本地仓库
git reset [--soft|--mixed|--hard] 版本库ID
## --soft 仅撤销版本库,不改暂存区和工作区
## --mixed 仅撤销交版本库和暂存区,不改工作区
## --hard 将工作区、暂存区和版本库恢复指定版本
总结
- git是一个版本管理工具
- git可以帮我们托管代码,每一次提交信息都会被记录在git仓库
- git可以帮我们管理代码,后续我们都是团队开发,每一个开发一个功能,通过git可以帮我们把代码进行整合