git init
使用当前目录作为git仓库
git add
git add <file>将该文件添加到缓存区,如果需要添加所有的文件用git add .
git commit
使用git commit -m " "将缓存区的内容添加到版本库," "中填写本次的提交说明
git commit -am " " = git add . + git commit -m " "
git status
通过git status可以看到当前所处的分支,以及本地仓库最新更改的文件状态
Changes not staged for commit以及no changes added to commit表示有修改的文件但是并没有准备提交的修改,此时若是我们需要提交该文件,需要先git add <file>再git commit
Changes to be committed表示文件已经添加到了暂存区,但是还没提交
nothing to commit, working tree clean表示没有需要提交的修改,工作目录干净
git diff
通过git diff加文件名可以查看文件具体修改了哪些内容
git log
通过git log可以查看之前每次提交的作者、时间以及提交说明
使用git log --pretty=oneline可以看到每次提交的commit id(版本号)以及提交说明,使用q退出
git reset
通过git reset --hard HEAD^ 可以实现版本的回退,HEAD表示当前版本,HEAD^ 表示上一个版本,如果想回退到上上个版本用HEAD^^ ,^ 个数过多可以用数字表示,如HEAD^50
也可以直接使用git reset --hard + 版本号实现版本的回退或是回退后的恢复,版本号通过git log --pretty=oneline可以得到,使用时只用输入前几位的版本号即可
如果文件添加到了暂存区,但是想丢弃该暂存区中的修改可以用git reset HEAD <file>
git reflog
通过git reflog可以看到自己每一次操作的命令,也可以用于来查找之前某次版本回退前的版本号
git cheackout --
使用git checkout -- <file>可以在文件在工作区的修改撤销。分2种情况:
- 文件修改后没有放到暂存区,那么会撤销到版本库的状态。包括如果文件误删了,但是版本库中有也可以使用
- 文件添加到了暂存区,但是又做了修改,那么会撤回到暂存区保存的状态
使用git checkout HEAD会用HEAD指向的master分支的文件替换暂存区以及工作区中的文件
git checkout
git checkout + 分支的名字表示切换到该分支上
git checkout -b + 分支的名字表示创建该分支并切换到该分支上
git rm
如果本地删除了一个文件,希望版本库中也同步删除,先git rm <file>,再git commit -m " "
如果希望同步删除本地和暂存区的文件用git rm -f <file>
如果希望删除暂存区的,但保留本地的文件使用git rm --cached <file>
git remote
使用git remote可以查看远程库的信息,使用git remote -v可以显示远程库更详细的信息
git clone
如果想把一个远程库中的项目直接克隆到本地使用git clone <repo>,其中repo为git仓库
git branch
查看当前所有的分支,前面标有*的是当前所处的分支
git branch <branch_name>表示新建一个分支branch_name
git branch -d + 分支名字表示删除该分支
git branch -D + 分支名字表示强行删除一个还没有被合并过的分支
git merge
当前所处分支1,使用git merge +分支2时表示将分支2上的操作与分支1合并,即分支1中指向的提交变为分支2的提交
如果需要保存分支2合并到了分支1中的信息,可以用git merge --no-ff -m " " + 分支2," "中填写此次提交合并的说明,以用于保存
git log --graph
使用git log --graph可以看到各分支的合并图
git stash
- 直接使用git stash可以将当前未提交的工作区暂时保存
- 使用git stash apply可以恢复工作区,但stash中的内容不删除
- 使用git stash pop可以恢复工作区并删除stash中的内容
- 使用git stash drop可以删除stash中的内容
- 使用git stash list可以查看stash中保存的内容,若多次stash,可以在查看后选择恢复指定的内容
git push
使用git push origin master可以将本地版本库中的项目推送到远程库中,origin为远程库,master为版本库的分支,如果需要push其他分支可以将master改为其他分支,默认push到远程库上的是关联的分支,可以使用git branch --set-upstream-to=origin/branch-name branch-name进行关联
git rebase
若此时有2个分支
A,B,C为之前的提交,模块D为远程分支origin上的提交,F、E为本地分支work的提交,此时若是要提交,首先需要将模块D和模块F合并,使用git merge可以得到
为模块D和模块F合并的模块,work分支上的模块G,在push前origin分支上是模块D,此时若是我们用git log --graph查看会出现一个闭合,不易操作和查看
但是使用git rebase后,可以得到
模块F'为合并后的模块,work分支上是模块F',在push前origin分支上是模块D,原来模块E、F提交会被git rebase取消,然后保存为补丁patch
rebase的过程中也会出现冲突,需要去解决,解决完冲突后,用git add去更新,然后无需git commit,直接git rebase --continue,git就会继续应用余下的补丁
当需要终止rebase的行动时:git rebase --abort,本地分支会回到开始时的状态
使用rebase可以可以最大程度保证origin代码不会被错误修改
git fetch
从远程获取更新的最新的内容到本地,但不进行合并
git pull
git pull = git fetch + git merge
git pull -r = git fetch + git rebase
git tag
- 切换到一个分支后,使用git tag <tagname>即可对该分支最新提交的commit打上该标签,如果还需要做有说明的标签的话,用git tag -a <tagname> -m " "," "内填写说明
- 如果想对之前某次的提交打上标签,可以先用git log --pretty=oneline找到该提交的commit-id,然后使用git tag <tagname> commit-id即可
- 使用git tag可以看到所有的标签列表,使用git show <tagname>可以查看某一标签的信息
- 标签可以用git tag -d <tagname>进行删除
- 标签可以用git push origin <tagname>推送到远程,也可以用git push origin --tags把所有未推送的标签全部推送
- 如果希望删除一个远程的标签,先用git tag -d <tagname>删除本地的标签,再用git push origin :refs/tags/<tagname>进行远程删除