查看当前工作区修改状态
- git status要随时掌握工作区的状态,
- 使用git status命令
- 如果git status告诉你有文件被修改过,
- 用git diff可以查看修改内容。
- git diff 默认查看所有被修改过的文件(不包括新增未add的文件)
- git diff filename (查看具体某个文件的修改内容 )
查看log记录
- git log 默认列出之前提交过记录(根据提交时间由近到远排列)
- git log -n 列出指定提交次数的记录
- git log --pretty=oneline 列出简单记录信息(commitid 和 提交注释)
- git reflog -n 查看指定次数的提交操作的记录信息(commitid)
- log and reflog
- 两者都是查看所有的commit操作的记录,log查看不到reset回退时跳过的commit操作的commitid
- (可以夸版本回退一次,进行实际演示)
- git log
- git reflog
- git reset --hard commitid
- git log
- git reflog
- git log --graph 可以查看分支合并图、
撤回和回滚
1、在工作区内修改了文件但没有提交到暂存区撤销所有修改: git checkout -- file.name 可以丢弃工作区的修改 ,只针对已跟踪的文件 git checkout -- file 命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
2、文件已经添加到暂存区撤回: git reset HEAD file or git rm --cached filename
3、文件已经提交到了本地的版本库且未推向远端的版本库中:
git reset --hard HEAD~n
or
git reset --hard commitid(推荐)
HEAD 表示提交的最新版本。HEAD^表示上一个版本,HEAD^^表示上上个版本。HEAD~100表示往上100个版本。
(上两个版本 HEAD~2)
4、文件已经从本地仓库推倒远程仓库的回退
git log or git reflog 找到目标版本
git reset --hard commiid
git push -f origin master (-f 参数是强制覆盖的意思,没有该参数会推送失败,因为远程仓库的版本高于当前版本)
- git revert commitid
- git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留
- git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区
- 团队开发时,版本回退一定要通知其他人员!如果其他同事在每次提交前没有先更细后提交的意识或习惯的话,回退是白费功夫。
状态冻结
- git stash 冻结当前修改状态
- git stash list 列出总结列表
- git stash pop 可以按版本恢复某个冻结状态并删除
- git stash apply 只是按某个版本恢复某个冻结状态不删除
- git stash drop 删除指定某个冻结状态
tag管理
- 创建tag: git tag -a tagname -m “添加tag的描述信息” (tag要有个规则标识例如:feature_abc_v1.1 ,给当前分支打一个tag名为tagname)
- 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- 提交创建的tag: git push origin tagname (同提交分支操作一样)
- 命令git tag可以查看所有标签。
- 查看tag:
- git tag 或 git tag -l
- 查看标签的具体信息:
- git show tag-name
- 删除标签:
- Git tag -d tagname (本地删除)
- Git push orign (空格):refs/tags/tagname (把删除的tag提交到远端)
- 删除标签实例:
- git tag -d v0.9
- git push origin :refs/tags/v0.9
- 获取远程仓库的tag信息(本地没有)
- git fetch origin tag $tag
同远程仓库关联
查看当前代码关联的远程仓库信息
- git remote 直接回车,列出所有关联的远程仓库
- git remote -v 回车 列出每个远程仓库名及对应的仓库地址url
- git remote add [shortname] [url]: 添加同一个远程仓库的关联关系
- git remote remove shortname : 删除同一个远程仓库的关联关系
- 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
- 关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
- 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
- 分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,很方便!
- .gitignore规则不生效的解决办法
- 把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:
- git rm -r --cached .
- git add .
- git commit -m 'update .gitignore'