Git - 分布式版本控制系统

状态

Git 有三种状态,你的文件可能处 于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的 保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前 版本做了标记,使之包含在下次提交的快照中。

tapd_22285581_1558941076_42.png

由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。
基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了 版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已 放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记 录中,也没有放入暂存区。

tapd_22285581_1558942318_8.png

版本回退

HEAD是一个特别指针,它指向你正在工作中的本地分支的指针,可以将 HEAD 想象为当前分支的别名。

#^代表第一父提交,命令回退到HEAD的第一父提交也就是上一版本,--hard会将所有状态的文件同样回退到上一个版本的状态
git reset --hard HEAD^
#回退到指定commit_id的版本,commit_id是用SHA1计算出来的一长串数字,只写前几位数字github也能找到相关版本
git reset --hard 

查看日志

git log

git log --pretty=oneline

查看区别

git diff HEAD -- 

git show命令

git show 

撤销修改

#将暂存区的修改撤销重新放回工作区,可以看到reset命令既可以回退版本,也可以撤销修改
git reset HEAD 
#将文件在工作区的修改全部撤销,就是让这个文件回到最近一次git commit或git add时的状态。这个命令中的--很重要,如果去掉--就变成了切换分支的命令
git checkout -- 

删除文件

#相当于手动删除文件,然后add添加到暂存区
git rm 
#删错了要恢复
git reset HEAD 
git checkout -- 

创建分支

#-b参数表示创建并切换
git checkout -b 
#相当于
git branch dev
git checkout dev

查看当前分支

#列出所有分支,当前分支前面会标一个 * 号
git branch

合并分支

git merge <要合并的分支名称>
#解决合并冲突,git status查看不能合并的文件,打开文件github会在冲突的地方做出标记,然后我们只需要手动编辑要保留的内容,然后提交文件

删除本地和远程分支

#删除本地
git branch -d 
#删除远程
git push origin --delete 

储藏工作

#储藏之后再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@{}
git stash drop stash@{}

删除未合并的分支

#将小d改为大D就可以了
git branch -D 

查看远程库的信息

git remote
#查看更详细的信息,显示抓取(fetch)和推送(push)的远程信息,如果没有推送权限则不显示push的远程信息
git remote -v

推送分支

git push origin 

抓取分支

#抓取过程中如果有冲突要先解决冲突
git pull

本地创建和远程分支对应的分支

git checkout -b  origin/

建立本地分支和远程分支的关联

git branch --set-upstream branch-name origin/branch-name

将提交历史整理成直线

#存在风险,可完整阅读官方文档加深理解
git rebase

创建标签

#在最近一次的commit上创建标签
git tag 
#在指定的commit上创建标签
git tag  
#创建带有说明的标签
git tag -a  -m  
#查看标签,按字母排序,而不是按时间排序
git tag
#查看标签信息
git show 

操作标签

#删除标签
git tag -d 
#推送单个标签到远程
git push origin 
#一次性推送所有尚未推送到远程的本地标签
git push origin --tag
#删除已经推送到远程的标签,冒号代表删除
git tag -d 
git push origin :refs/tags/

忽略特殊文件

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]下面对应要删除的别名那一行删掉

你可能感兴趣的:(Git - 分布式版本控制系统)