参考:
Git教程
// TODO 待补充图片
配置与概念
#配置
git config --global user.name "guan"
git config --global user.email "guan@xx.com"
#--global 这个参数,表示你这台机器上所有的Git仓库都会使用这个配置
#查看配置
git config --list
#查看某一个配置
git config user.name
git config user.email
配置SSH ssh秘钥默认存储到~/.ssh文件夹中。若该文件夹中没有ssh秘钥,可以手动生成
# 生成ssh秘钥
ssh-keygen
这样得到了两个文件:id_rsa和id_rsa.pub,分别为私钥和公钥。 最后可以将pub公钥复制到gitlab/github中
CRLF:
- windows : CRLF( 回车换行 \r\n )
- Linux/Unix: LF (换行 \n)
- Mac: LF(现在是换行, 以前是回车( Classic Mac )CR, \r )
如果是在Windows系统上,把它设置成true,这样当checkout代码时,LF会被转换成CRLF:
$ git config --global core.autocrlf true
创建repository并初始化
git init
git init 路径
git init --bare 路径
clone
# clone远程仓库到本地
git clone ssh://git@git.xxx.com:2222/g00522473/hwlearning.git
# clone远程仓库的某个分支到本地
git clone <仓库地址> -b <branchName>
## clone到本地指定路径
git clone <仓库地址> <本地路径>
基本操作
- 查看版本库状态
git status
git status -u
- add:
#add指定一个文件
git add 文件
#下面两组命令的并集
git add -A
git add --all
# 监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区.
# 包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add .
# 仅监控已经被add的文件(即tracked file)
# 包括被修改的文件提交到暂存区,不会提交新文件(untracked file)。
git add -u
git add --update
- commit:
- 普通提交
# 如果提交某一个文件,需要在最后指明文件名
git commit -m "This is a Message" 文件
- 文件被修改后,再次提交文件被修改后,再次提交
# 方式一:先对modified的文件进行add操作,然后在执行commit操作
git add -A
git commit -m "message"
# 方式二:增加 -a 参数,可以省去前面的add操作
git commit -am "This is a new message"
- 删除
git rm <fileName>
- log
#最近的日志在最上面显示
git log
#一行显示
git log --oneline
git log --oneline --graph
- ignore文件
#可忽略指定文件、指定文件夹、正则表达式匹配的文件
# 举例:
# 忽略folder下面的所有内容,但不包括folder文件夹本身
folder/
# 忽略folder下面的所有内容,同时包括folder本身。即忽略整个folder文件夹
folder
# 忽略所有以.iml文件结尾的文件。
*.iml
# * 表示匹配若干字符
# ? 表示匹配一个字符
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。所以需要先把本地缓存删除,变成untrack的状态,然后再提交。
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
- GUI
##在gitBash中进入版本库的目录。执行命令
gitk
diff与checkout
- diff
#比较所有的文件
git diff
#比较指定文件
git diff 文件
git diff --cached
- checkout
分支
- master分支:git中的主分支
- head:指向当前分支
#查看分支
git branch
# 查看远程所有分支
git branch -r
#查看本地和远程的所有分支
git branch -a
#创建分支
git branch <branchname>
#切换到分支1
git checkout 分支1
#快捷:创建并切换分支(相当于上面两个命令的缩写)
git checkout -b 新分支名称
#查看所有分支
git branch -v
#查看分支列表????
git branch -r
#合并到当前分支
#例:当前分支为master,将bugfix分支合并到当前分支中
git merge bugfix
#删除本地分支
git branch -d <branchname1> <branchname2> <branchname3>
-D:--delete --force的快捷键
#删除远程分支(将远程personal仓库的分支删除)
git push personal --delete <branchname1>
#重命名本地分支
git branch -m <oldbranch> <newbranch>
-M:--move --force的快捷键
策略:
在实际开发中,我们应该按照几个基本原则进行分支管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活。那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本。你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。 所以,团队合作的分支看起来就像这样:
stash暂存??
#暂存
git stash (save 省略的)
#列出暂存的list
git stash list
#恢复
git stash apply
#清空暂存的list
git stash clear
远程仓库
- 关联远程仓库
#关联
#其中的 origin 是一个名字,可以随便起。这个名字代表了这个远程仓库的地址。
#以后对这个远程仓库进行操作的话,是需要使用这个名字即可
git remote add origin https://github.com/shanxu100/gitTest.git
#查看关联列表
git remote -v
查看关联列表: origin表示名字,就是添加关联的时候的设置名字。 后面的url是远程仓库地址
#删除关联的远程仓库
#origin是设置的远程仓库名字。
git remote remove origin
注意:如果添加远程仓库关联后,重复添加,会提示如下错误: fatal: remote xxxxxxx already exists. 所以是需要先删除旧的远程仓库,再重新添加
- push
#语法
git push <远程主机名> <本地分支名>:<远程分支名>
#把本地库的所有内容推送到远程库上
#意义:将本地的master分支推送到origin主机。如果origin主机的master分支不存在,则会被新建。
#-u:参数表示指定origin为默认主机。这样以后就可以不加任何参数使用git push了。
git push -u origion master
#表示将本地分支localbranch和远程仓库origin的master分支关联起来
git branch --set-upstream-to=origin/master localbranch
#push到默认主机
#simple方式
git push
#将当前分支推送到origin远程仓库
$ git push origin
- pull
第一次的步骤:
- 需要使用init命令初始化一个文件夹
- 然后使用pull命令拉取文件
- ...........修改文件并commit......(省略)
- 使用git remote add命令将本地仓库和远程仓库关联
- 使用push命令提交到远程仓库(第一次可能需要-u参数)
#pull
git pull <远程主机名> <远程分支名>:<本地分支名>
#例如:将远程主机origin的master分支拉取过来,与本地的brantest分支合并。
git pull origin master:brantest
#例如:将远程origin主机的master分支拉取过来和本地的当前分支进行合并。
git pull origin master
#从github上面拉取
git pull 地址
#例如:
git pull https://github.com/shanxu100/gitTest.git
#省略了地址
git pull
pull和clone的区别
- clone 是本地没有 repository 时,将远程 repository 整个下载过来。
- pull 是本地有 repository 时,将远程 repository 里新的 commit 数据(如有的话)下载过来,并且与本地代码merge。
pull和fetch的区别
- git fetch相当于是从远程获取最新版本到本地,但不会自动merge。
- 如果需要有选择的合并,git fetch是更好的选择;效果相同时,git pull将更为快捷。
tag相关
# 查看tag
git tag
# 根据通配符来过滤查看
git tag -l "*1.0*"
# 查看Tag详细信息
git show <tagName>
# 打tag
#待补充
#拉取tag信息
# pull代码的时候也会将tag一同拉取过来
git pull
git pull --tags
#将tag同步到远程服务器
git push <远程主机名> <tagName>
# 推送本地所有tag
git push --tags
# 删除tag
git tag -d <tagName>
# 删除远端tag
git push origin :refs/tags/<tagName>