git命令
初始化一个git目录
git init
添加单个文件到暂存区
git add <file>
添加所有文件到暂存区
git add .
添加文件到本地仓库
git commint -m <message>
查看git仓库状态
git status
查看工作区和暂存区的的差异
git diff <file>
查看暂存区和本地仓库的差异
git diff --cached
查看工作区和本地仓库的差异
git diff HEAD -- <file>
场景1:当在工作区修改了某个文件,但还没add,使用
git checkou -- <file>
可以丢弃修改场景2:当修改了某文件,还add到了暂存区,使用
git reset HEAD <file>
就回到了场景1继续即可场景3:修改文件并commit到版本库,想撤销本次提交,使用
git reset --hard commit_id
commint_id是由SHA1计算而来,使用十六进制表示。显示从最近到最远的日志
git log
显示简洁版日志
git log --pretty=online
显示分支合并图
git log --graph --pretty=oneline --abbrev-commit
Git中HEAD表示当前版本,上一版本是HEAD^,上上版本是HEAD^^,往上100个版本是HEAD^100
查看命令历史
git reflog
使用
git rm <file>
可以删除一个文件,然后commit到版本库即可
远程仓库
生成公钥
ssh-keygen -t rsa -C "771662863@qq.com"
,在.ssh目录下生成私钥id_rsa和公钥id_rsa.pub两个文件关联一个远程仓库
git remote add origin git@server-name:path/repo-name.git
分支管理
- 查看分支
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 branch -D <name>
强行删除
暂存本地修改
当正开发时,需要修复一个线上bug,使用
git stash
暂存工作现场,然后切换分支去修复,修复完后再git stash pop
,可以回到工作现场在master分支修复的bug,想要合并到当前dev分支,可以用
git cherry-pick <commit_id>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动
多人协作
用
git push origin <branch-name>
推送自己的修改如果推送失败,则因为远程分支比本地更新,需要先用git pull试图合并
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用
git push origin <branch-name>
推送就能成功如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用
git branch --set-upstream-to <branch-name> origin/<branch-name>
- 查看远程库的信息
git remote
- 查看远程库详细信息
git remote -v
- 在本地创建和远程分支对应的分支,使用
git checkout -b <branch-name> origin/<branch-name>
,本地和远程分支的名称最好一致
Rebase
git rebase
操作可以把本地未push的分叉提交历史整理成直线;rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。git pull --rebase
pull的同时rebase
标签
命令
git tag <tagname>
用于新建一个标签,默认为HEAD,也可以指定一个commit id命令
git tag -a <tagname> -m "message"
可以指定标签信息命令
git tag
可以查看所有标签命令
git push origin <tagname>
可以推送一个本地标签;命令
git push origin --tags
可以推送全部未推送过的本地标签;命令
git tag -d <tagname>
可以删除一个本地标签;命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签