三个区
- 工作区(当前编辑的区域)
- 暂存区(stage,git add 之后文件待的地方)
- 版本库(git commit 之后文件待的地方)
查看log
git log --pretty=oneline --abbrev-commit
回滚版本
| 命令 | 作用 |
|---|---|
| git reset --soft | 暂存区->工作区 |
| git reset --mixed (默认参数) | 版本库->暂存区 |
| git reset --hard | 版本库->暂存区->工作区 |
- 回退上个版本
git reset --hard HEAD^ - 回退上上个版本
git reset --hard HEAD^^ - 回退上100个版本
git reset --hard HEAD~100
撤销修改(撤销工作区已编辑的代码)
- 未add到暂存区
git checkout -- <filename>
# 新版本中可用下面的命令代替
git restore <filename>
- 已add到暂存区
git reset HEAD <filename> // 拉取版本库中最近的代码到暂存区
# 上面的命令在新版本可用 git restore --staged <file> 代替
git checkout -- <filename> // 拉取暂存区的代码到工作区,如果暂存区中没有则从版本库中拉取
常用操作
- 修改了4个文件,在不放弃任何修改的情况下,其中一个文件不想提交,如何操作?(没add : git add 已经add: git reset --soft )
- 修改到一半的文件,突然间不需要或者放弃修改了,怎么恢复未修改前文件? (git checkout )
- 代码写一半,被打断去做其他功能开发,未完成代码保存?(git stash)
- 代码写一半,发现忘记切换分支了?(git stash & git checkout )
- 代码需要回滚了?(git reset)
删除文件
git rm <filename>
rm <filename>
撤销删除(未从版本库中删除)
git checkout -- <filename>
分支
创建分支
git branch dev
切换分支
git checkout dev
# 或者
git switch dev
查询分支
git branch
创建并切换分支
git checkout -b dev
# 或者
git switch -c dev
合并分支
# 把dev分支合并到master
git checkout master
git merge dev
删除分支
git branch -d dev
# 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除
分支合并图
git log --graph
复制其他分支的提交到当前分支
git cherry-pick <commit>
合并分支的指定版本到当前分支
比如现在有两个分支,master 和 dev,需要把dev的f提交的提交合并到master版本
# 首先切换到 master 分支
git checkout master
# cherry pick
git cherry-pick f
把dev的f 至 i 提交的提交合并到master版本
# 首先切换到 master 分支
git checkout master
# cherry pick
git cherry-pick f^..i
stash
存储当前修改
git stash
查看当前stash list
git stash list
恢复stash到工作区
git stash apply # stash内容不删除
git stash pop # 删除stash内容
删除stash
git stash drop [stash@{0}]
标签 tag
新建标签
git tag <tagname> [<commit id>]
# 指定标签内容
git tag -a <tagname> -m "blablabla..."
查看标签列表
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>
使用远程仓库
关联本地库和gitee
git remote add origin git@gitee.com:xxxx/xxxx.git
删除本地已关联的远程
git remote rm origin
在本地创建和远程分支对应的分支
git checkout -b branch-name origin/branch-name
建立本地分支和远程分支的关联
git branch --set-upstream-to branch-name origin/branch-name
# the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
推送到远程库
# 第一次push加-u参数 以后可直接git push 代替git push origin master
git push -u origin master
多人合作
多人协作的工作模式通常是这样:
-
首先,可以试图用git push origin 推送自己的修改;
-
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
-
如果合并有冲突,则解决冲突,并在本地提交;
-
没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
-
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
参考
https://segmentfault.com/a/1190000002783245
创建标签 - Git教程 - 廖雪峰的官方网站