git是一个免费、开源的分布式版本控制系统,可以高效的对大/小项目进行版本管理。工作了一段时间,踩了一些坑以后才发现,使用git对代码和版本进行控制真的是十分必要的。本文总结了git的基础知识和常用的命令,具体内容分为如下:
一、 git基础知识。
二、git配置文件。
三、git本地工作目录操作。
四、git远程仓库。
五、git标签。
六、git分支
七、git diff管理
一、git基础知识
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
二、git配置文件
三、git本地工作目录操作
1. git 中文件的各个状态:
unstaged - git 仓库中没有此文件的相关记录
modified - git仓库中有这个文件的记录,并且此文件有改动
staged - git仓库追加、删除的文件被暂时保存,且这些追加删除并未提交到git仓库
commited - git追加或修改的文件被比较到本地仓库(git仓库中大部分是这种文件,所以git status并不显示这种文件)
2. git clone现有仓库:
git clone url (URL支持 git, ssh, http, https等多种协议)
3. git 查看仓库中各文件状态:
git status
b. git commit -m "my message" ---比较文件到仓库
git rm --cache test.c ---git仓库
此时如果做如下操作:
四、git远程仓库
1.3 查看单个仓库
五、git 标签
六、git分支
七、git diff 查看文件修改
1. git log dir/file 查看当前文件夹/文件的修改
git log -p -n 1 查看最近一次修改的详细
2.
八、其他常用git场景:
1. 撤销本地commit:
2. 放弃本地所有修改,包括commit和未提交的内容:
git fetch origin niepengyu
git reset --hard origin/niepengyu
3. 代码合并:
git revert commitnum — 撤销commitnum的修改,并产生一条撤销的commit记录
git reset --hard — 相当于git的HEAD变了,文件也变了。如果有文件修改未track会直接丢弃修改
git reset --soft — 相当于git的HEAD回退了,但是把文件修改放在缓存区
git reset --mixed —相当于git的HEAD变了,文件改变了,但文件并未在缓存区
HEAD ~n ---最近的n次
HEAD ^n —第n次
例如有三个commit,它们的commit顺序分别为
commit3
commit2
commit1
下面运行:
git revert HEAD 回退commit3,并产生revert commit2的记录。
git revert HEAD ~1 回退commit2,并产生revert commit2的记录。
git reset --hard HEAD ~1 撤销commit3,直接回退到commit2结束。
git reset --soft HEAD ~1 撤销commit3,把修改存储在暂存区
git reset --mixed HEAD ~1 撤销commit3,修改并未存储在暂存区
git rebase/merge
当master和mywork各自向前有多个commit以后,这时master和mywork就存在分叉了。这时如果想在mywork分支上把master分支的提交和mywork的分支合并可以使用如下命令,先把本地commit取消,并把它们临时保存为布丁,存放到.git/rebase中。
然后把mywork分支更新为最新的master分支后,再把保存的布丁应用到mywork分支上。git merge与git rebase产生的commit顺序不同。
git checkout mywork
git rebase master
git stash/ git stash pop
git stash 把当前目录和index的所有修改压入一个栈,并保留一个clean的工作状态,即处于上一次最新提交处。
git stash list 会显示这个栈list
git stash apply: 取出stash list中的上一个项目。也可以git stash apply stash@{1}
git stash drop:删除上一个,也可以指定参数删除一个项目
git stash clear: 删除所有项目
git merge origin test ---把test branch的修改合并到当前分支
5. git 删除branch恢复:
慎重删除分支,一旦删除只能通过其他分支或者本地记录的commit号修复分支了。
6. git fetch与pull的区别:
git fetch相当于从远程获取并merge到本地。git pull仅相当于从远程的origin的master分支上下载到origin/master上。
7. git cherry-pick 提取某个commit号到其他的branch:
git checkout new_branch
git cherry-pick commit-id
九、正确的开发流程:
1. 基于staging/online分支,创建自己的开发分支。
2. 基于自己的开发分支修改,并提交。
3. 开发测试。
4. 提交merge request。 提交到online版本,发布。