git所有指令汇总

0.前言

廖雪峰老师的教学非常仔细认真,给个好评!
本文将指令汇总,方便快速查看使用。
同学们想学操作原理还请移步廖老师的教学网站,跟着做一遍就会了

0.1说明
  1. 下面的<>,敲指令的时候都不需要输入。
  2. HEAD表示最新版本
  3. 工作区 > add > 暂存区 > commit > 版本库

1.建立git版本库

mkdir xxx 创建文件夹
git init 把这个目录变成Git可以管理的仓库

2.提交

git add <file> 将file添加到暂存区
git commit -m <message> 将当前暂存区的所有修改内容,都提交到仓库,并添加备注“message”,可中文
git commit 提交,然后进入vim编辑器,按i 》输入message 》esc 》 输入:wq! 》回车,提交,作用同上面一行指令。

3.查看

git status 查看当前工作区文件状态
git diff <file> 查看file和HEAD版本的区别
git log 查看所有commit的历史记录(回退到前天,那昨天的记录就没了,想看昨天记录可用git reflog,详细可看廖雪峰的版本回退
git log --pretty=oneline 查看所有commit的历史记录——简洁版
git reflog 查看所有所有的操作记录,供你后悔使用。

4.回退

git reset --hard HEAD^ 回退到上一个版本(在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。)
git reset --hard 1094a 1094a,是你查看git log历史记录里的版本号,版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
git checkout -- <file> 把file在工作区的修改全部撤销,恢复到修改之前的样子。之前有add过,那就回到add时的状态,没add过就回到最初的起点(此时响起了Jay的歌),总之就是让这个文件回到最近一次git commit或git add时的状态。(感觉自己好啰嗦,就怕说不明白)
git reset HEAD <file> 把add file的动作撤销,重新放回工作区,改动内容依然保留着,你可用:
①checkout清空修改内容
②可用add再次添加到暂存区。

5.删除

rm <file> 删除file,然后add,然后commit。后悔的话就reset --hard <版本号>,或者checkout,删除和修改一样,可后悔可恢复。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

6.远程仓库github

创建github账号
添加ssh 参考 https://www.liaoxuefeng.com/wiki/896043488029600/896954117292416
Create a new repository 创建一个远程仓库
git remote add origin [email protected]:axxx/bxxx.git 将本地库与远程库关联。
(origin-远程库名字 axxx-你的github账号 bxxx-上一步创建的repository的名字,创建完后页面上有这句话,复制出来在你本地工作区执行即可)
git push -u origin master 第一次推送到github
git push origin master 推送到github

7.克隆

git clone [email protected]:zhaokei/gitskills.git 从远程仓库克隆 git clone后面的地址看下图
git所有指令汇总

8.分支

因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
查看分支合并图:git log --graph --pretty=oneline --abbrev-commit

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

git merge --no-ff -m "merge with no-ff" dev 合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。(我觉得就是还保留这个分支)

9.隐藏工作空间stash

应用场景:正在a文件中添加新功能b,明天开发完提交a文件。此时来了生产bug代号101,10分钟内立刻修改,需要改a文件,怎么办?不能把没开发完的代码也提交上去,怎么办:
方法1.(不推荐)笨方法:a文件复制粘贴,恢复到生产版本,然后修改bug,改完后提交a文件。然后再继续开发功能b。
方法2.(推荐)git的stash(隐藏)方法,给力!

假设当前正在dev分支下修改a文件
git stash 隐藏当前所在分支dev的工作区
git checkout master
git checkout -b issue-101
修改了a文件,处理了bug
git add a
git commit -m “fix bug 101”
git checkout master
git merge --no-ff -m “merged bug fix 101” issue-101
git checkout dev
git stash list 查看隐藏列表
git stash pop 恢复隐藏工作区,并删除此隐藏 = git stash apply [email protected]{0} 恢复 + git stash drop 删除

10.强行删除分支

git branch -D <name>强行删除分支
分支修改了内容add + commit 后,使用 git branch -d <name>删除分支会不好用,需要用大写D

11.多人协作

git remote 查看远程库信息
git remote -v 远程库更详细信息
git push origin <branch_name> 推送到远程仓库
git pull 更新到本地并合并

git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

  1. 解决多人版本冲突的内容后,add > commit > push
  2. 后提交的人就需要合版本了。
12.rebase

没弄明白,就是整理分支log的。想研究的去看廖雪峰老师讲解。 https://www.liaoxuefeng.com/wiki/896043488029600/1216289527823648

13.标签

git tag <tagname> <commitid> 创建标签(无版本号时在HEAD上创建标签)
git tag 查看标签列表(按字母排序)
git show <tagname> 查看标签详情
git tag -a <tagname> -m "some remark" <commit-id> 创建带有说明的标签
git tag -d <tagname> 删除标签
git push origin <tagname> 推送标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
删除已推送到远程的标签:
1.本地删除 git tag -d <tagname>
2.删除远程标签 git push origin :refs/tags/<tagname>

14.给命令配置别名

git config --global alias.st status status => st ,这以后git st = git status
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 丧心病狂配置查看分支树
git所有指令汇总
总之,是为了方便,简化命令。其他参考 https://www.liaoxuefeng.com/wiki/896043488029600/898732837407424