参考
https://www.liaoxuefeng.com/wiki/896043488029600
概念
工作区(Working Dictionary) –除了.git文件夹之外的文件和文件夹 版本库(Repository) – .git文件夹 暂存区(Stage) – 位于版本库中,存放文件更变,如git add等命令将文件更变存入暂存区,git commit后清空暂存区 解决merge冲突 – 当在master分支合并dev分支时,如果有冲突的话, Git会用<<<<<<<,=======,>>>>>>>
标记出不同分支的内容,这时需要人工修改,保存后执行add,commit提交.然后可以用git log --graph --pretty=oneline --abbrev-commit
查看分支的合并情况 分支策略 – 在实际开发中,我们应该按照几个基本原则进行分支管理:首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。 bug分支 – 适用场景 :在dev分支工作时,未完成工作不能commit,但此时需要修复master分支的一个bug。 – 解决方案 : (1) 在dev分支保存现场git stash
(2)新建fixbug
分支,解决bug后merge到master分支 (3)此时dev分支还是有bug的,需要将fixbug的提交复制到dev分支git cherry-pick fixbug_commit_id
(4)恢复dev现场git stash pop
(5)dev完成后合并到master分支 Note:(4)(5)中的合并可能需要手动解决冲突
命令
命令 功能 git init 新建git仓库 git add file添加一个文件到暂存区 git commit -m ‘msg’提交 git status 当前git状态 git diff file查看file与HEAD更变的内容 git diff commit_id/HEAD~n --file查看file与某个提交更变的内容 git reset --hard HEAD^回退到上一个版本 git reset --hard HEAD^^回退到上两个版本 git reset --hard HEAD~n回退到上n个版本 git reset --hard commit_id回退到指定commit_id的版本 git log 查看提交历史,以便确定要回退到历史
的哪个版本 git reflog 查看命令历史,以便确定要回到未来
的哪个版本 git checkout – file放弃工作区
的修改(包括删除等),还原为HEAD版本 git reset HEAD file放弃暂存区
的修改,还原为HEAD版本,工作区还存在文件更变 git reset --hard HEAD放弃工作区
的修改和暂存区
的修改 git rm file从版本库中删除文件(如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容 )
命令 功能 git remote add origin git@github.com:用户名/项目名.git添加远程仓库 git push -u origin master 第一次推送master分支所有内容 git push origin master 推送修改到远程,如果远程有其他人的提交,需要先git pull,解决冲突后再提交 git clone git@github.com:用户名/项目名.git克隆远程项目到本地 git pull 拉取最新的 git branch --set-upstream-to=origin/master master
远程master分支和本地master分支建立关联 git pull --allow-unrelated-histories 本地和远程单独建立的时候,从远程pull需要这个命令
命令 功能 git branch 查看分支,带*号为当前分支 git branch name创建分支 git checkout name或git switch name切换分支 git checkout -b name或git switch -c name创建+切换分支 git merge name合并某分支到当前分支 git branch -d name删除分支 git log --graph --pretty=oneline --abbrev-commit 查看分支合并情况 git merge --no-ff -m “merge with no-ff” dev 强制禁用Fast forward模式
,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息 git stash 储存工作现场 git stash list 查看储存的工作现场 git stash pop/apply/drop 恢复工作现场并删除stash/恢复工作现场/删除stash git stash apply stash@{0}恢复指定的stash git cherry-pick commit_id复制一个特定的提交到当前分支 git rebase 可以把本地未push的分叉提交历史整理成直线,目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比 git tag tagname为HEAD新建标签 git tag tagname commit_id为某次提交新建标签 git tag -a tagname -m “msg” commit_id为某次提交新建标签并指定说明文字 git show tagname查看标签信息 git tag 查看所有标签 git push origin tagname推送本地标签到远程 git push origin --tags 推送全部未推送过的本地标签 git tag -d tagname删除一个本地标签 git push origin:refs/tags/ tagname删除一个远程标签
技巧
创建alias 编辑~/.gitconfig
添加
[alias]
co = checkout
ci = commit
br = branch
st = status
unstage = reset HEAD
last = log -1
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit