状态
Git 有三种状态,你的文件可能处 于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的 保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前 版本做了标记,使之包含在下次提交的快照中。
![](https://img.haomeiwen.com/i14326701/4c67fbb7c543da40.png)
由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。
基本的 Git 工作流程如下:
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了 版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已 放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记 录中,也没有放入暂存区。
![](https://img.haomeiwen.com/i14326701/8a4bcb394e30b207.png)
版本回退
HEAD是一个特别指针,它指向你正在工作中的本地分支的指针,可以将 HEAD 想象为当前分支的别名。
#^代表第一父提交,命令回退到HEAD的第一父提交也就是上一版本,--hard会将所有状态的文件同样回退到上一个版本的状态
git reset --hard HEAD^
#回退到指定commit_id的版本,commit_id是用SHA1计算出来的一长串数字,只写前几位数字github也能找到相关版本
git reset --hard <commit_id>
查看日志
git log
git log --pretty=oneline
查看区别
git diff HEAD -- <file>
git show命令
git show
撤销修改
#将暂存区的修改撤销重新放回工作区,可以看到reset命令既可以回退版本,也可以撤销修改
git reset HEAD <file>
#将文件在工作区的修改全部撤销,就是让这个文件回到最近一次git commit或git add时的状态。这个命令中的--很重要,如果去掉--就变成了切换分支的命令
git checkout -- <file>
删除文件
#相当于手动删除文件,然后add添加到暂存区
git rm <file>
#删错了要恢复
git reset HEAD <file>
git checkout -- <file>
创建分支
#-b参数表示创建并切换
git checkout -b <branch_name>
#相当于
git branch dev
git checkout dev
查看当前分支
#列出所有分支,当前分支前面会标一个 * 号
git branch
合并分支
git merge <要合并的分支名称>
#解决合并冲突,git status查看不能合并的文件,打开文件github会在冲突的地方做出标记,然后我们只需要手动编辑要保留的内容,然后提交文件
删除本地和远程分支
#删除本地
git branch -d <branch_name>
#删除远程
git push origin --delete <branch_name>
储藏工作
#储藏之后再git status 就会出现nothing to commit, working tree clean,可以多次stash
git stash
#储藏的工作列表
git stash list
恢复储藏工作
#用stash apply恢复,但是恢复后,stash内容并不删除,你需要用stash drop来删除;
git stash apply
git stash drop
#stash pop恢复的同时把stash内容也删了
git stash pop
#恢复删除指定的stash,用stash list查看列表选中一个恢复,其中最近一次stash的num值最大,最早的num值为0,删除一个stash后num值全部减一。
git stash apply stash@{<num>}
git stash drop stash@{<num>}
删除未合并的分支
#将小d改为大D就可以了
git branch -D <branch_name>
查看远程库的信息
git remote
#查看更详细的信息,显示抓取(fetch)和推送(push)的远程信息,如果没有推送权限则不显示push的远程信息
git remote -v
推送分支
git push origin <branch_name>
抓取分支
#抓取过程中如果有冲突要先解决冲突
git pull
本地创建和远程分支对应的分支
git checkout -b <branch_name> origin/<branch_name>
建立本地分支和远程分支的关联
git branch --set-upstream branch-name origin/branch-name
将提交历史整理成直线
#存在风险,可完整阅读官方文档加深理解
git rebase
创建标签
#在最近一次的commit上创建标签
git tag <tag_name>
#在指定的commit上创建标签
git tag <tag_name> <commit_id>
#创建带有说明的标签
git tag -a <tag_name> -m <text> <commit_id>
#查看标签,按字母排序,而不是按时间排序
git tag
#查看标签信息
git show <tag_name>
操作标签
#删除标签
git tag -d <tag_name>
#推送单个标签到远程
git push origin <tag_name>
#一次性推送所有尚未推送到远程的本地标签
git push origin --tag
#删除已经推送到远程的标签,冒号代表删除
git tag -d <tag_name>
git push origin :refs/tags/<tag_name>
忽略特殊文件
Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
官方配置文件模版,使用时可根据实际情况组合一下。
如果某次需要添加被忽略的文件到Git
git add -f App.class
如果发现某个不应该被忽略的文件被忽略了
git check-ignore -v App.class
Git会告诉我们,.gitignore的第几行规则忽略了该文件。
配置别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
删除别名
#查看配置文件
vim .git/config
#将[alias]下面对应要删除的别名那一行删掉
网友评论