1)git diff 文件全局名
对比文件与当前版本库的不同。
PS:效果等同:
git diff HEAD -- 文件全局名
2)cat 文件全局名
查看文件内容
git status 查看当前的工作区的文件的状态,如果都已经commit的话,则不会显示status,如果有修改或者其他的操作,但是没有commit的情况下,会显示所有的update的内容。
3)git log
查看提交版本日志(只展示当前所在版本及以前版本)。 主要是看提交哦的日志和版本,可以确定需要回退到的某个版本
PS:单排显示:
git log --pretty=oneline
版本号简写显示:
git log --pretty=oneline --abbrev-commit
时间线显示:
git log --graph --pretty=oneline --abbrev-commit
4)git reflog
查看提交版本日志(展示所有版本) 这个主要是用来提交的版本的日志,可以用来改变到之后的版本,可以查看之前的操作。
6)git reset --hard HEAD^
PS:版本穿梭,HEAD表示当前版本,HEAD^表示上一版本,HEAD^^表示上两个版本...
7)git reset --hard HEAD~1
PS:版本穿梭,HEAD表示当前版本,HEAD~1表示上一版本,HEAD~2表示上两个版本...
8)git reset --hard 版本号
PS:版本穿梭,版本号不必32位都写全,一般写7位就可以了,git会自己去查找。
9)git checkout -- 文件全局名
工作区文件内容会被版本库上最新的内容覆盖
10)git reset HEAD 文件全局名
这样可以清空暂存区,而工作区的内容不变,所以工作区文件状态会发生变化
11)git rm 文件全局名
删除文件
PS:只有提交至版本库的文件才能rm,只是在工作区或暂存区是不能使用rm的
12)ssh-keygen -t rsa -C "qwebh3210@163.com"
生成ssh key
13)git remote add origin git@github.com:qwebh3210/gittest.git
本地仓库关联远程仓库
PS:也可以用http协议关联:
git remote add origin 此处为你的git仓库地址url
14)git push -u origin master
把本地仓库当前分支推送到远程仓库指定分支
PS:第一次推送需要参数-u进行验证,之后不需要
15)git clone 远程仓库地址
克隆远程仓库
PS:git clone下来的只有master分支
16)git add 文件全局名
把文件添加至暂存区
PS:删除的文件不需要add,可以直接commit
17)git log -1
PS:显示最后一次提交信息(作者、时间、提交注释)
1. git clone 远程仓库地址 拉下来的只是master分支,如果需要切换到其他分支,
可以使用git checkout 远程分支名,就可以切换到该分支,例如: git checkout development 切换到development分支,并且直接和该远程分支关联。
2. git branch 查看当前本地分支
git branch -a 可以查看所有的本地分支和远程分支
3. git remote -vv 或者 git remote -v 都可以,查看当前本地仓库和哪个远程仓库关联
4. git stash 这是一个非常爽的命令, 例如: 当前你工作的分支还没有提交,但是你需要切换到其他的分支去看看代码、解决bug什么的,这时候你直接git checkout 是不能切换过去的,git会提示你当前分支存在没有提交的更改,需要你commit更改,这时候,你可以使用git stash 命令,将当前分支没有提交的更改【暂存】,然后你就可以愉快的使用 git checkout 分支名 切换到其他的分支啦,然后你切换回来的时候,再次使用 git stash pop 就可以将暂存的内容弹出来。
这里存在这样一种情况,如果你的栈里面存储了很多的stash代码,这时候,你就需要使用 git stash list 命令,查看存储的所有的栈信息了,然后使用git stash apply stash@{1} ,就可以取出版本为stash@{1}的内容,当你想清空栈信息的时候,使用git stash clear 来将栈清空。
git的回滚操作(reset、revert)
大致分为下面2种情况:
1、没有push
这种情况发生在你的本地代码仓库,可能你add、commit以后发现代码有点问题,准备取消提交,用reset
git reset \--soft | --mixed | --hard
参数说明:
–soft:保留源码,只回退commit信息到某个版本,不涉及index的回退。如果还需要提交,直接commit即可。
–mixed:会保留源码,只是将git commit和index的信息回退到了某个版本。(git reset默认的就是–mixed模式,即git reset等价于git reset --mixed)
–hard:源码也会回退到某个版本,commit和index都会回退到某个版本。(注意这种方式是会改变本地代码仓库源码)
当然有人在push代码以后,也使用 reset --hard 回退代码到某个版本之前。但是这样会有一个问题,你线上的代码没有变,线上commit、index都没有变,当你把本地代码修改完提交的时候你会发现全是冲突…所以,这种情况你要使用下面的方式
2、已经push
对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,让线上、线下代码保持一致,用revert。
git revert用于反转提交,行evert命令时要求工作树必须是干净的。
git revert用一个新提交来消除一个历史提交所做的任何修改。
revert之后你的本地代码会回滚到指定的历史版本,这时你再git push就可以把线上的代码更新。(这里不会像reset造成冲突的问题)
revert的使用,需要先找到你想回滚版本唯一的commit标识代码,可以用git log或者在adgit搭建的web环境历史提交记录里查看。
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
通常,前几位即可
git revert c011eb3
综上,git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。看似达到的效果是一样的,其实完全不同:
- 上面我们说的如果你已经push到线上代码库,reset删除指定commit以后,你git push可能导致一大堆冲突,但是revert 不会。
- 如果在日后现有分支和历史分支需要合并的时候,reset恢复部分的代码依然会出现在历史分支里,但是revert方向提交的commit并不会出现在历史分支里。
- reset是在正常的commit历史中,删除了指定的commit,这时HEAD是向后移动了。而revert是在正常的commit历史中再commit一次,只不过是反向提交,它的HEAD是一直向前的。
git stash
应用场景:
- 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
- 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。
git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。
命令
- git stash
能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。 - git stash save “save message”
作用等同于git stash,区别是可以加一些注释 - git stash list
查看当前stash中的内容 - git stash pop
将当前stash中的内容弹出,并应用到当前分支对应的工作目录上。
注:该命令将堆栈中最近保存的内容删除(栈是先进后出)
如果从stash中恢复的内容和当前目录中的内容发生了冲突,也就是说,恢复的内容和当前目录修改了同一行的数据,那么会提示报错,需要解决冲突,可以通过创建新的分支来解决冲突。 - git stash apply
将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况。
堆栈中的内容并没有删除。
可以使用git stash apply + stash名字(如stash@{1})指定恢复哪个stash到当前的工作目录。 - git stash clear
清除堆栈中的所有 内容 - git stash show
查看堆栈中最新保存的stash和当前目录的差异。
Git中tag的用法
- 添加标签: git tag -a version -m “note”
注解:git tag 是打标签的命令,-a 是添加标签,其后要跟新标签号,-m 及后面的字符串是对该标签的注释。 - 提交标签到远程仓库 :git push origin --tags
注解:就像git push origin master 把本地修改提交到远程仓库一样,-tags可以把本地的打的标签全部提交到远程仓库。 - 删除标签:git tag -d version
注解:-d 表示删除,后面跟要删除的tag名字 - 删除远程标签:git push origin :refs/tags/version
注解:就像git push origin :branch_1 可以删除远程仓库的分支branch_1一样, 冒号前为空表示删除远程仓库的tag - 查看标签:git tag或者git tag -l
tag是的当前分支上的一个快照, 一个具体时间点缩影
- 对于已经加入版本管理的文件,加入到ignore中不生效解决办法
git rm --cached filename
让其从版本库中移除,不再追踪