文章目录
git 常用命令
1.1 tag
新建tag
# git tag -m "信息" 版本号 分支
gti tag -m "初始化版本号" V1.0 master
git tag -a V1.1
# 终端会提示输入注解信息,vim,保存后生效
删除tag
# git tag --delete 版本号
git tag --delete V1.0
拉取指定版本的代码
git clone --branch v1.6.5.7 https://github.com/ManaPlus/ManaPlus.git
查看所有 tag
git tag
查看此版本所修改的内容
git show v1.0
1.2 commit
代码写完之后,我们一般执行提交操作
git add . // 添加所有文件
git commit -m "功能开发完成"
执行完 commit 操作之后,如果想取消刚才的commit操作怎么办?
git reset --soft HEAD^ # 取消commit并保留代码
git reset --hard HEAD^ # 取消commit并不保留代码
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
–mixed
不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
–soft
不删除工作空间改动代码,撤销commit,不撤销git add .
–hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
修改commit注释
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。
1.3 stash
1.3.1 使用场景
-
当正在 dev 分支上开发一个功能时,这时生产上出现一个紧急bug需要修复,但是 dev 分支上的功能仍在开发中,不想提交,此时可以使用
git stash
命令将所有修改保存到堆栈区,然后切换分支进行bug修复。修复完成后,切换 dev 分支,git stash pop
命令将最近一次保存的内容弹出并应用到当前分支。注意:该命令会将堆栈中最近保存的内容删除
-
当多人在同一个分支上开发时,可能存在修改同一个文件的情况。此时,当 pull 最新代码时,会提示部分文件需要先 提交或者stash 再pull代码。
1.3.2 命令
git stash # 将当前所有未提交的修改(工作区和暂存区)保存至堆栈中
git stash push # 同上
git stash push 文件1 文件2 # 保存指定的文件
git stash save 注释内容 # 作用与 git stash 类似,区别是可以加一些注释
git stash list # 查看当前 stash 中的内容
git stash pop # 将最近一次保存的内容弹出并应用到当前分支,同时删除堆栈中最近保存的内容
# 如果从stash中恢复的内容和当前目录中的内容发生了冲突,也就是说,恢复的内容和当前目录修改了同一行的数据,那么会提示报错,需要解决冲突
git stash apply # 将最近一次保存的内容弹出并应用到当前分支,但是不会删除最近一次 stash 的内容
git stash drop stash@{0} #从堆栈中移除指定的 stash
git stash clear # 清除堆栈中的所有内容
git stash show # 查看堆栈中最新保存的stash和当前目录的差异
git stash show stash@{1} # 查看指定的stash和当前目录差异
git stash show -p # 查看详细的不同
git stash show stash@{1} -p # 查看指定的stash的差异内容
git stash branch
从最新的 stash 创建分支。
应用场景:当储藏了部分工作,暂时不去理会,继续在当前分支进行开发,后续想将stash中的内容恢复到当前工作目录时,如果是针对同一个文件的修改(即便不是同行数据),那么可能会发生冲突,恢复失败,这里通过创建新的分支来解决。可以用于解决stash中的内容和当前目录的内容发生冲突的情景。
发生冲突时,需手动解决冲突。
1.4 add
git add . # 将当前分支所有的修改提交到暂存区
git add /path/to/file # 将当前项目下指定的文件提交到暂存区
1.5 push
在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了。
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,
第一个master是本地分支名,第二个master是远程分支名。
git push origin master
# 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin :refs/for/master
# 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
git push origin
# 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push
# 如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名