版本回退
git log
查看版本记录
git reset --hard HEAD^
返回上一个版本,HEAD 表示当前版本,上一个版本就是 HEAD^, 上上一个版本就是 HEAD^^
, 简写 HEAD~2;
git reset --hard 53b1c4d
返回到指定版本;
git reflog
查看命令历史;
撤销工作区的修改
git checkout – readme.txt;
回到最近一次 git commit 或 git add 时的状态;
git reset HEAD xxx.txt;
撤销已经 git add 但还没有 commit 的内容;
git revert
撤销 commit ;不修改原有的commit,而是增加一个 commit 将原有 commit 中的文件变化还原;
git rm xxx.txt ; git commit -m" "
删除文件
远程仓库
git remote add origin git@server-name:path/repo-name.git;
添加远程仓库;
git push -u origin master
git push 如果当前分支与多个主机存在追踪关系,那么这个时候 -u 选项会指定一个默认主机,这样后面就可以不加任何参数使用 git push;
git push origin master
推送本地master分支;服务器只接受 fast forward 的push操作;fast forward 的意思是本地分支的新增历史记录开始于服务器分支的最新记录;
git push origin :
如果这个分支在服务器上不存在,服务器会自动创建个新分支;
git clone git@gitlab.alipay-inc.com
克隆远程仓库;
git remote origin
查看远程仓库信息;
git remote -v
显示远程仓库的详细信息;
git checkout -b dev origin/dev
克隆远程仓库时,git会自动在本地创建 master 分支,和远程的master 分支对应起来;克隆后如果你需要在dev分支上开发,需要将本地 dev 分支与远程 origin/dev 分支进行关联;
git branch --set-upstream dev origin/dev
将本地 dev 分支与远程 origin/dev 分支进行关联;
git checkout -b dev
创建 dev 分支,然后切换到 dev 分支;等价于:git branch dev ; git checkout dev;
多人协作的工作模式通常是这样:
1、首先,可以试图用 git push origin branch-name 推送自己的修改;
2、如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
3、如果合并有冲突,则解决冲突,并在本地提交;
4、没有冲突或者解决掉冲突后,再用 git push origin branch-name 推送就能成功;
git branch -a
查看所有分支
git branch
查看当前分支(*)
git branch -r
查看远程仓库的所有分支;
git branch -d dev
删除 dev 分支,删除之前需要先合并;
git branch -D
删除没有被合并过的分支;
git fetch
更新远程仓库的分支信息;git pull = git fetch + git merge # 会直接用远程分支更新你的本地分支;
git merge dev
将 dev 分支合并到当前分支;合并分支的过程中遇到冲突并解决后运行 git add 文件名,可以标注冲突为已解决状态;
git log --graph --pretty = online --abbrev-commit
查看分支的合并情况;
git merge --no-ff -m “no fast forward”
合并分支时,如果可能,git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息;强制禁用 Fast Forward 模式,git 会在 merge 时生成一个新的commit,这样在分支历史上就可以看到分支信息;
标签管理
标签也是版本库的一个快照,相当于 Commit id 的别名,一个容易记忆的有意义的名字;
如何打标签:
1、切换到需要打标签的分支上; git checkout master
2、git tag v1.0
git tag -d
删除本地标签;
git push origin --tags
推送全部未推送过的本地标签;
git push origin :refs/tags/
删除一个远程标签