git 命令常用笔记
1. 全局操作
git --version //git 机器上是否存在
git init --bare project.git //服务端:初始化一个新的仓库
chown -R zhangsan:zhangsan project.git/ //修改仓库的权限
2. 添加、提交修改、对比、重命名
添加/提交:
git add <file> //添加单个文件
git add --all //添加所有,适合项目初始化或批量提交的时候
git add . //进入某个文件夹根目录,表示添加此目录下面所有变更的文件
git commit -m "操作说明" //提交
对比:
重命名:
git mv a.php b.php //重命名
git status -s //文件关联状态
git commit -a -m "a.php文件修改为b.php" //-a修改的全部提交
git push origin master //推到远程
3. 日志查看
git log //查看所有日志
git log -2 //查看最近提交的2行
git log --pretty=oneline //以行的形式显示
git log --pretty=oneline --abbrev-commit //行短标识的显示形式
git log --graph --pretty=oneline --abbrev-commit //查看分支合并图,并以行短标识的显示形式
3. 查看历史命令
git reflog
4. 回滚版本
git reset --hard commit_id
git reset --hard e9a838d #返回到某个节点,不保留修改。
git reset --soft e9a838d #返回到某个节点。保留修改
回滚到上N个版本的快捷方式:
git reset --hard HEAD^ //上1个版本
git reset --hard HEAD^^ //上2个版本
git reset --hard HEAD^^^ //上3个版本
当然如果要回退到上100个版本不可能100个^,可以:
git reset --hard HEAD~100
5.撤销修改,恢复删除,获取指定commit_id信息
工作区:
git checkout -- <file>
git checkout -- readme.md
git checkout -- . //恢复在当前目录下的所有修改
暂存区:
第1步:git reset --hard <file>
第2步:按工作区的处理方式处理
已经提交版本库:
第1步:git reset --hard commit_id
第2步:按回退的流程处理
推送到远程库:
恭喜你,无药可救
获取指定commit_id文件信息:
git checkout commit_id <file>
git checkout e9a838d readme.md
与git clean 混合使用:
git checkout -- . && git clean -xdf
6-1:清除
git clean -df #返回到某个节点
git clean 参数 -n 显示 将要 删除的 文件 和 目录 -f 删除 文件 -df 删除 文件 和 目录
6-2.删除文件
git rm <file>
git commit -m "操作说明"
7.分支操作
查看分支:git branch
创建分支:git branch <name>
分支推送到远程:git push origin <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
强制删除一个没有合并过的分支:git branch -D <name> tips:慎用
删除远程分支:git push origin --delete <name>
7-1.重命名远程分支
在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支。
查看远程分支:git branch -av
删除远程分支:git push origin --delete <oldname>
重命名本地分支:git branch -m <oldname> <newname>
推送本地分支:git push origin <newname>
8.分支合并保留合并记录
git merge --no-ff -m "merge with on-ff" dev
tips:合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并;而fast forward合并就看不出来曾经做过合并,默认不加--no-ff是按fast forward的合并方式。
9.分支临时存储
保存:
git stash //备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。不带备注。
git stash save "临时修改1001bug,暂存" //带备注
git stash -a save "临时修改1001bug,暂存" // -a选项会把项目里面新加入的代码文件同时放到暂存区
查看:
git stash list //显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复
恢复:
git stash apply [--index][<stash@{id}>] //恢复后,stash内容并不删除,你需要用git stash drop来删除
git stash pop [--index][<stash@{id}>] //恢复最新(指定stash)并删除stash
删除:
git stash drop [<stash@{id}>] //删除某一个进度,默认删除最新进度
创建分支
git stash branch <branchname> <stash@{id}> //基于暂存区创建分支
清空:
git stash clear //清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
参数解释:
--index 参数:不仅恢复工作区,还恢复暂存区 <stash@{id}> 指定恢复某一个具体进度。如果没有这个参数,默认恢复最新进度
以下命令恢复编号为0的进度的工作区和暂存区
git stash pop -- index statsh@{0}
10.标签(tag)管理
列出所有tag:
git tag
详情查看:
git show <tagname> //查看指定tag包信息
git show v1.0
创建:
git tag <tagname> //新建一个标签,默认为HEAD
git tag v1.0
git tag <tagname> commit_id //指定一个commit id
git tag v1.0 b1b76f
git tag -a <tagname> -m "描述tag的说明" //带有备注tag的信息
git tag -a v1.0 -m "供应链1.0开发完成,上线" b1b76f
git tag -s <tagname> -m "描述tag的说明" //用私钥签名一个标签,PGP签名标签
git tag -s <tagname> -m "供应链1.0开发完成,上线" b1b76f
删除:
未推送到远程:
git tag -d <tagname> //删除指定tag包
git tag -d v1.0
已推送到远程:
第1步:git tag -d v1.0 //删除本地
第2步:git push origin :refs/tags/v1.0 //删除远程tag
推送:
git push <主机名> <tagname> //推送指定tag
git push origin v1.0
git push <主机名> --tags //一次性推送全部尚未推送到远程的本地标签
git push origin --tags
参数解释:
origin:远程主机名
11.忽略特殊不用提交的文件
第1步:编写.gitignore文件
第2步:把你需要过滤的文件直接写在.gitignore文件中。
tips: .gitignore要通过版本库管理起来。官方已经提供了很多文件范例参考https://github.com/github/gitignore,可以把你需要的直接copy进.gitignore文件中。
12.配置别名
方便管理和使用命令,如git st就表示git status这是不是很爽
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD' //撤销修改
git config --global alias.last 'log -l' //显示最后1次提交
配置文件存放目录:
cat .git/config
删除别名:
直接删除配置文件.git/config alias节点,指定别名的那一行,保存就行
tips:当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中.
13.git服务器管理
管理公钥,用Gitosis
控制权限,用Gitolite
14. 删除不存在对应远程分支的本地分支
查看远程分支状态:git remote show origin
本地版本库中去除远程删除的分支:git remote prune origin
15. 打包指定commit修改的代码
git archive -o update.zip 待导出的ID(a3a12c4) $(git diff --name-only 待导出的上一个提交ID(3ba0909))
例:git archive -o update.zip a3a12c4 $(git diff --name-only 3ba0909)
Tips: 这个其实就是比较版本之前差异,然后导出不一样的。