基本操作
git init 初始化git仓库,当前目录下多了一个.git
的目录,这个目录是Git来跟踪管理版本库的,同时自动创建的第一个分支master,以及指向master的一个指针叫HEAD
git add . 添加到暂存区,有.gitignore时会忽略相关gitignore文件
git commit -m '提交说明' 把暂存区的所有内容提交到当前分支
git checkout -- file可以丢弃工作区的修改
git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区
git rm <file>删除文件
git log 查看提交历史
git reflog 查看所有历史提交
git remote add origin git@github.com:michaelliao/learngit.git 关联远程仓库,其中origin是远程仓库的名字,可以自己定义,关联后,使用命令git push -u origin master第一次推送master分支的所有内容。此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
git clone git@github.com:michaelliao/gitskills.git(SSL方式,也可以为https方式) 克隆一个本地库
git status 查看工作区状态
git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支
git branch --set-upstream branch-name origin/branch-name 建立本地分支和远程分支的关联
git config --global alias.st status 给命令设置别名
版本回退
本地版本回退
git reset --hard HEAD^ 回退到上一版本
git reset --hard d5d1657f3dd928c0e 回退到指定commit
远程版本回退
通过git log 获取当前commitid a
先回退本地版本
git reset --mixed a HEAD重新指向最新commitid
git push origin master
reset的三种方式
--hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区
--soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。
--mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中
分支管理
master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点,当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上,从此时开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。
git branch dev 创建分支
git checkout dev切换分支
git checkout -b dev 创建并切换到dev分支
git branch -a 查看本地所有分支
git branch -d dev 删除本地分支
git branch | grep -v 'master' | xargs git branch -D 删除除master以外所有的本地分支
git merge命令用于合并指定分支到当前分支
冲突解决 修改冲突文件,add 、commit
bug修复
git stash 临时保存工作区变更
git stash list 查看临时保存的信息
git stash pop 恢复临时保存的变更并删除stash
git cherry-pick <commitid> 复制一个特定的提交到当前分支 ,当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场,在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动
tag标签
git tag <tagname> [<commitid>]用于新建一个标签,默认为HEAD,也可以指定一个commit id
git tag -a <tagname> -m "blablabla..."可以指定标签信息
git tag可以查看所有标签
git show <tagname>可以看到说明文字
git push origin <tagname>可以推送一个本地标签
git push origin --tags可以推送全部未推送过的本地标签
git tag -d <tagname>可以删除一个本地标签
git push origin :refs/tags/<tagname>可以删除一个远程标签
忽略特殊文件
在项目根目录下生成.gitignore文件,在IDE中都可以快速生成,或者参考https://github.com/github/gitignore复制一份,再加上自定义的忽略文件即可,通常.gitignore也会纳入版本控制。没有加入版本控制的文件,状态为untracked,如果不小心把本应忽略的文件加入了版本控制,再将该文件加入到.gitignore文件是不起作用的,此时需执行git rm -r -f --cache . 删除所有track文件(文件数量较少时可以git rm -r -f --cache <文件名> 将指定文件踢出版本控制),然后配置.gitignore文件,执行add、commit等后续操作。
详细使用可以参考:https://www.liaoxuefeng.com/wiki/896043488029600