分支模型
- 产品级的分支模型
常驻分支(一旦创建不会轻易被删除):
- master分支(也就是production分支)
- development分支(从master创建的,开发分支)
活动分支(创建后可能会被删除):
- feature(从development创建,开发人员一般都用这个)
- hotfix分支( 从master创建,产品发布后发现bug了,修改bug就在这个分支上)
- release分支(从development创建,测试以及产品预发布用的)
-
开发线和发布线
开发线.png
发布线.png -
init status
-
git init
初始化一个仓库 -
git status
对目前的仓库状态的跟踪
按照文件内容分:工作目录,暂存区index,提交区history
按照文件状态分:未跟踪untrack,已跟踪track
- add
-
git add <file>
提交文件到暂存区,同时被跟踪 -
git add .
提交所有已修改的文件到暂存区,同时被跟踪
- .gitignore
- # 此为注释 –,将被 Git 忽略
- *.a 忽略所有.a结尾的文件
- !lib.a 但lib.a 除外
- /TODO 仅仅忽略项目根目录下的TODO文件,不包括subdir/TODO
- build/ 忽略build目录下的所有文件
- doc/*.txt 忽略doc/note.txt 但不忽略 doc/subdir/note.txt
- rm
-
git rm --cached <file>
仅仅从暂存区删除文件(如果已经提交到暂存区了,此时再去gitignore中添加忽略文件是没有作用的,怎么办呢?那就是先删除暂存区中的被跟踪的文件,再添加忽略文件 -
git rm <file>
从暂存区和工作目录中同时删除文件 -
git rm $(git ls-files —deleted)
删除所有已被跟踪,但是在工作目录中已经被删除的文件
- commit
-
git commit -m
从暂存区提交到提交区 m 是写的这次提交的注释 -
git commit -a -m
直接从工作区提交到提交区,不经过暂存区
- log
-
git log
显示提交的日志 -
git log —oneline
简化日志内容 -
git log --color --graph --pretty=format:'%Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
美化一下显示的日志
这么长的命令怎么办呢?请看下一个命令
- alias
-
git config alias.shortname <fullcommand>
给命令起个别名,
shortname就是起的别名
fullcommand是命令
例如上述的日志记录太长了,可以起个别名直接调用它(如下)
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
这样一来就可以这样使用了git lg
就可以了
alias这个命令的配置项都在.gitconfig中配置的
- diff
-
git diff
工作目录和暂存区的差异 -
git diff --cached <reference>
暂存区和某次提交的差异,reference是提交的hash值 -
git diff <reference>
如果reference是一个值则是工作目录和某次提交的差异,两个值则是两次提交的差异
eg :
git diff 951c4c6
则是工作目录和951c4c6提交那次的差异eg :git diff 951c4c6 a1b6ddc
则是两次提交的差异对比
- checkout
-
git checkout -- <file>
撤销工作目录的修改,也就是从暂存区复制到工作目录 -
git checkout HEAD -- <file>
直接从上次提交区复制到工作目录(也就是history到index)
- reset
-
git reset HEAD <file>
撤销暂存区的内容,也就是把上次提交区复制到暂存区 -
git reset --mixed <reference>
回退到某个版本(mixed是默认的可以不写),此时head已经指向了新的版本节点,同时清空暂存区,工作目录不动,但是会把head移动所产生的内容变动以及暂存区的变动全部放到工作目录中 -
git reset --hard <reference>
回退到某个版本,此时head已经指向了新的版本节点,同时清空暂存区和工作目录的一切修改,保持和提交区一致的版本 -
git reset --soft <reference>
回退到某个版本,此时head已经指向了新的版本节点,但是工作目录和暂存区不动,并且会把head移动所产生的内容变更放到暂存区中
总结.pngHEAD~1 表示当前节点的上一个节点,也就是上一次提交,同理HEAD~n就是上n次提交(可以代替reference也就是hash值,表示起来更方便)
HEAD^ 和 HEAD~1 一样,HEAD^^ 和 HEAD~2 一样
- branch
-
git branch <branchname>
新建一个分支 -
git branch -d <branchname>
删除某一个分支 -
git branch -v
列出所有的分支 -
git checkout <branchname>
切换分支 -
git checkout -
切换到上一个分支 -
git checkout -b <branchname>
创建分支并head指向这个分支 -
git checkout <reference>
会让head指向一次commit提交
这种情况属于detached head状态,这种情况下是不能提交代码的,因为head此时没有指向任何一个分支,怎么解决呢?一种是将head指向某个分支,git checkout dev,然后在进行操作。一种是在当前位置,git branch new,创建一个新的分支,然后在进行操作
- stash
-
git stash save 'm'
假如我在这分支有一些操作,还没操作完,但是需要切换到别的分支,此时就可以使用这个命令,暂时把状态保存起来,m是注释,方便你切换回来的时候可以找到它 -
git stash list
列出所有的stash -
git stash pop stash@{0}
想要切换回来时调用,stash{0}就是你要切换回来的那个stash,可以从list中查找
- merge
-
git merge <branch>
把分支合并到当前分支 -
git merge <branch1> <branch2>
合并两个分支到当前所在分支
- tag
-
git tag
设置别名,例如在发布一个版本后我想在这个版本上打个版本号
起别名v0.1.png
git tag v0.1 <reference>
这样的话就知道这次的版本号是v0.1,我们获取代码的时候可以直接git checkout v0.1 就可以获取这个版本了
- 远程仓库
-
git clone
<远程仓库地址> 克隆一份远程仓库到本地 -
git push origin master
提交代码到远程仓库 -
git pull origin master
拉去最新的代码从远程仓库到本地 -
git remote -v
查看远程仓库的配置
- 整体配置
一般都是在.gitconfig中进行配置的,文件位置在C:\Users\用户名.gitconfig
将如下内容拷贝到配置文件中:
[user]
name = 你的名字
email = 你的邮箱
[alias]
opush = push origin
opull = pull origin
br = branch
co = commit
st = status
df = diff
me = merge
ch =checkout
lg = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative
l = log
lp = log --pretty=oneline
[color]
ui = auto
[color "branch"]
added = yellow
changed = green
untracked = cyan
[color "diff"]
meta = yellow
frag = magenta bold
commit = yellow bold
old = red bold
new = green bold
whitespace = red reverse
[color "diff-highlight"]
oldNormal = red bold
oldHighlight = red bold 52
newNormal = green bold
newHighlight = green bold 22
网友评论