创建与提交

在当前文件夹创立一个版本库

1
git init

把文件添加到暂存区

1
git add [文件名或文件路径]

把添加到暂存区中的文件提交到版本库

1
git commit -m "[提交说明]"

版本管理

更新和回退的操作是一样的,其实都是维护一个HEAD的指针指向哪一个commit

查看版本记录

1
2
git log                   # 显示提交日志
git log --pretty=oneline # 用一行显示提交日志

版本回退

--hard代表回到上次提交时的状态,文件被修改(修改暂存区,文件)
--soft代表回到上次提交后的状态,暂存区和文件均未被修改(都不修改)
--mixed或不添加参数代表回到上次提交后的状态,暂存区与指定版本相同,文件未被修改(修改暂存区,不修改文件)

1
2
3
git reset --hard HEAD^     # 回退对上一个版本的已提交状态
git reset --hard HEAD^^ # 回退到上两个版本的已提交状态
git reset --hard HEAD~100 # 回退到100个版本前的已提交状态

命令记录

可以回看每一次命令记录,获得对应版本号

1
git reflog

更新版本

1
git reset --hard [指定版本号的SHA1前几位]

查看各个文件状态

1
git status

丢弃工作区的修改

若文件已经提交到暂存区,则返回原暂存区的状态
若文件尚未进行提交,则撤回到版本库的状态

1
git checkout -- [文件名或文件路径]

删除版本库文件

若在文件目录中误删了文件,则可以通过checkout进行回退

1
git rm [文件名]

远程仓库

创建SSH-Key

1
ssh-keygen -t rsa -C "[邮箱地址]"

关联空仓库

需要通过SSH链接(开头为git@)关联,不能通过HTTPS链接(开头为https://)关联

1
git remote add origin [个人仓库的SSH链接]

将本地内容推送到远程库上

下面出现的origin是远程库的习惯命名,与Github上显示的名字无关

1
2
git push                   # 一般使用
git push -u origin master # 第一次推送使用,用于关联分支

查看远程库信息

1
git remote -v

解绑远程库关联

1
git remote rm origin

仓库克隆

1
git clone [仓库链接]

分支管理

创建分支

1
git branch [分支名]

切换分支

1
2
git checkout [分支名]  # 等价
git switch [分支名] # 等价

创建并切换分支

1
2
git checkout -b [分支名]  # 等价
git switch -c [分支名] # 等价

查看分支

1
git branch

合并当前分支到指定分支

将当前分支的指针指到指定分支上
在存在冲突的情况下,也就是有修改的情况下,分支不能直接合并,需要手动修复冲突

1
2
git merge [指定分支名]                         # 快速合并(出现冲突时不是)
git merge --no-ff -m "[提交信息]" [指定分支名] # 禁用快速合并,且会创建一个新commit

删除分支

1
2
git branch -d [分支名]  # 只删除分支指针,不删除commit
git branch -D [分支名] # 删除分支指针和commit

分支策略

需要保证master分支的稳定性,一般的开发在dev分支上。此外,每一个人的开发都要维护自己的分支。

存储工作现场

1
git stash

查看工作现场列表

1
git stash list

恢复工作现场

1
2
git stash apply  # 恢复工作现场,并不删除stash中的对应条目
git stash pop # 恢复工作现场,并删除stash中的对应条目

将对应提交复制到当前分支

只是复制修改,而不是复制全部

1
git cherry-pick [指定版本号的SHA1前几位]

抓取分支

1
git checkout -b [分支名] origin/[分支名]

设置本地分支与远程分支的链接

1
git branch --set-upstream-to=origin/[分支名] [分支名]

获取最新提交

1
git pull

推送指定分支

1
git push origin [分支名]

标签管理

输入标签

需要注意的是,标签是打在版本号上面的

1
2
git tag [标签名]                        # 对当前版本打标签
git tag [标签名] [版本号的SHA1序列前几位] # 对指定版本打标签

删除标签

1
git tag -d [标签名]

将本地标签推送到远程

1
git push origin [标签名]

删除远程标签

1
2
git tag -d [标签名]                  # 先删除本地标签
git push origin :refs/tags/[标签名] # 再删除远程标签