一、Git整体理解
Git代码管理是分布式管理方式系统,优点在于其极高的安全性和非常强大的分支管理。
工作区(working directory): 就是本地的代码区,电脑能看到的目录,就是工作区.
暂存区(Index):工作区下有一个隐藏的'.git'文件,其主要作用是存储Git自动创建的第一个master分支,还有指向master分支的HEAD指针.还有一个最重要的stage的暂存区.需要提交的文件修改通通放到暂存区,然后一次性提交到暂存区的所有修改.
本地仓: 本地的个人仓库.管理着个人的代码的版本信息.
远程仓: 线上的仓库.管理着推送到服务器的代码版本.
过程一、有工作区暂存区
工作区->暂存区:
用git add . 添加所有的修改或者git add 添加单个指定的文件修改到暂存区中.
暂存区->工作区:
(1)git rm --cached "文件路径" 不删除物理文件,紧将git的缓存删除.
(2)git rm --f "文件路径" 不仅将该文件从缓存中 删除,还将物理文件删除(不会放到垃圾桶).
例如: git rm -rf .DS_Store
(3)git reset 利用版本库清空暂存区.原理:将当前分支重设(reset)到指定的或者HEAD(默认,如果不指定commit,默认是HEAD,即最新的一次提交)
--hard
git reset --hard 重设(reset)index和working directory,自从以来在working directory中的任何改变都被丢弃,并把HEAD指向
--soft
git reset --soft index和working directory中的内容不作任何改变,仅仅把HEAD指向。这个模式的效果是,执行完毕后,自从以来的所有改变都会显示在git status的"Changes to be committed"中
过程
二、由暂存区本地仓库
暂存区->本地仓库
用git commit -m'本次commit的描述'
本地仓库->暂存区
(1) git reset 利用版本库清空暂存区.原理:将当前分支重设(reset)到指定的或者HEAD(默认,如果不指定commit,默认是HEAD,即最新的一次提交)
(2) --hard
git reset --hard 重设(reset)index和working directory,自从以来在working directory中的任何改变都被丢弃,并把HEAD指向
(3) --soft
git reset --soft index和working directory中的内容不作任何改变,仅仅把HEAD指向。这个模式的效果是,执行完毕后,自从以来的所有改变都会显示在git status的"Changes to be committed"中.退回到该次commit提交,但是该版本之后所有的修改都没有了,如果想要恢复,就要试图从还未关闭的终端中找到你想要的退回的版本号,或者用git reflog查找你想要的commit版本号.继续用git reset --soft 回退
过程
三、由本地仓->远程仓库
用git push
说明:三种git add的区别
-git add .提交新文件(new)和被修改(modified)的文件,不包括被删除(deleted)的文件
git add -u提交被修改(modified)和被删除(deleted)的文件,不包括新文件(new)
git add -A 提交所有变化
1、在本地创建一个Git管理的项目
从线上拉项目到本地
用git clone "项目的地址路径"克隆一个Git管理的项目到本地
本地项目上传线上
git init
git remote add origin "地址url"
2、Git上的常用查看操作
(1)查看文本内容
cat
(2)查看git的状态
git status会告诉你在当前的分支上git的情况(有没有修改,修改的文件是什么等)
3、查看更详细的文件修改
git diff查看所有文件的不同
git diff 查看指定文件的不同
diff是difference的缩写,只能查看还未add(还没加入到暂存区)的修改
4、查看所有的commit信息
git log
git log --pretty=oneline更简洁的查看log信息(只有commit号和描述信息)
5、查看所有的git操作过的命令,可以找到删除了的commit号
git reflog
6、查看分支合并图
git log --graph
四、冲突处理
需要把
<<<<<
=======
>>>>>>
中间的删掉
五、Git分支操作
1、分支基本操作
分支的创建和切换
git branch "分支名"创建一个分支git checkout "分支名"切换到该分支
创建并切换到该分支git checkout -b "分支名"
列出所有的分支
git branch列出本地分支 用*标记当前的分支
git branch -a列出远程分支
合并分支
git merge "分支名"合并指定分支到当前分支
git rebase "分支名"合并指定分支到当前分支
两者的区别在于会不会保留分支操作的记录,前者记录,后者不记录.建议用merge
删除分支
删除本地分支:git branch -d "分支名"
强制删除本地分支:git branch -D "分支名"
删除远程分支:git push origin :(轻易不要动啊)
如果提示the branch XXX is not fully merged(XXX分支有没合并到当前分支的内容)
本地新建了一个分支要推送到线上,需要设置关联或者追踪
第一次push:git push origin 本地分支名:远程分支名
远程端生成了一个新的分支,拉取到本地
先关联远程端分支到本地:git branch --set-upstream-to=origin/
然后git pull
六、bug的分支
用issue作为分支的开头标记,当有一个bug出现需要改的时候,先拉取一个issue分支,修改并合并到开发分支上,然后删除issue分支。
七、feature分支
开发新的功能的时候,最好拉取一个新的分支,以feature开头。
丢掉一个没有合并过的分支,即删除分支
git branch -D 强制删除该分支内容
八、暂存的使用
1、git stash暂存
2、 git stash list查看所有的暂存
3、git stash apply从暂存开始执行,但是stash内容不会删除
4、 git stash drop删除暂存
5、git stash pop回复暂存的同时删除暂存
6、git stash apply stash@{0}恢复指定的暂存
九、远程仓的操作
查看远程仓的信息
git remote
git remote -v显示更详细的信息
将分支推送到远程仓
git push origin 本地分支名:远程分支名
十、标签的使用
标签智能在master分支上使用,尽量写清楚所有的修改,为了万一的版本回退做好描述工作。
1、git tag 新建一个标签
2、git tag -a -m'指定的标签信息'
3、git show 查看详细的tag信息
4、git tag查看所有的tag名字
5、git tag -d 删除一个标签
6、git push origin < 标签名>推送标签到远程
7、git push origin --tags一次性推送所有未推送的标签
8、删除远程仓上的tag
先删除本地的标签:git tag -d
删除远程端的标签:git push origin :tag名字
十一、Git配置全局信息
1、配置作者名称
git config --global user.name "Your Name"
2、配置个人邮箱
git config --global user.email "email@example.com"
3、配置git的颜色(文件名会标记上颜色)
git config --global color.ui true
十二、Linux的一些简单操作和一些符号的解释
1、目录/文件的操作
-mkdir "目录名" 在当前路径下创建一个文件夹
mvdir "目录1" "目录2"移动或者重命名一个目录 (如果目录2不存在,就直接修改目录1的名称为目录2)
rmdir"目录名" 删除一个目录
touch创建一个文件
vim "文件名" 编辑文件,如果文件不存在,就创建并进入编辑.
删除一个文件
sudo rm -rf 在上帝权限下删除,可以删除一个该用户没有权限的文件(包括系统文件),不建议使用
rm 能删除当前用户权限下的文件
2、转换目录
cd + "路径"进入该文件目录下(也可以将文件直接拖进来)
cd ..回到上级目录
-cd . 当前目录 cd / 回到根目录
cd test.rtf 不可用. 不能cd到文件里.只能cd到目录.
报错信息: -bash: cd: test.rtf: Not a directory
3、拷贝/移动/删除
cp "需要拷贝的文件路径" "目标地址路径"
拷贝文件 例如: cp /Users/goulela/Desktop/test.rtf /Users/goulela/Desktop/文件夹2
mv "需要移动的文件路径" "目标地址路径"
移动文件 例如: mv 文件夹2 /Users/goulela/Desktop/创建文件夹/文件夹
4、显示操作
-file "文件名"显示文件的类型
wc "文件名"统计文件的字符数,词数,行数
pwd查看当前所在的目录
ls 显示当前路径下有什么文件
ls + "目录名" 显示特定的路径下有什么文件
ls -w 显示中文
ls -l 详细信息
ls -a 显示所有文件,包括隐藏文件
5、时间操作
data显示系统的当前日期和时间
cal显示日历
6、网络与通信
ping "url" 给一个远程主机发送 回应请求
终止ping打印 control + c
who 列出当前登录的所有用户
whoami显示当前正进行操作的用户名
十三、符号解释
1、-r 就是向下递归,不管有多少级目录,一并删除
2、-f 就是直接强行删除,不作任何提示的意思
3、-rf 向下递归强制删除
十四、显示安装详细信息
在安装命令后面添加--verbose,可以查看打印详细信息
十五、git config
配置git的相关参数
git一共有3个配置文件:
1、仓库级的配置文件:在仓库的.git/.gitconfig,该配置文件只对所在的仓库有效。
2、全局配置文件:Mac系统在~/.gitconfig,Windows系统在C:\Users\\.gitconfig。
3、系统级的配置文件:在Git的安装目录下(Mac系统下安装目录在/usr/local/git)的etc文件夹下的gitconfig。
$ git config -l
$ git config -l
$ git config -e
$ git config --add
$ git config --get
$ git config --unset
$ git config --global user.name
$ git config --global user.email
$ git config --global http.postBuffer
$ git config --global color.ui true
$ git config --global credential.helper cache
$ git config --global credential.helper 'cache --timeout='
$ git config --global credential.helper store
十六、Git clone
从远程仓库克隆一个版本库到本地。
$ git clone
$ git clone
$ git clone -b
十七、Git init
初始化项目所在目录,初始化后会在当前目录下出现一个名为.git的目录。
$ git init
十八、git status
查看本地仓库的状态
$ git status
$ git status -s
十九、git remote
操作远程库
$ git remote
$ git remote -v
$ git remote --verbose
$ git remote add
$ git remote rename
$ git remote remove
$ git remote set-url
二十、git branch
操作git的分支命令
$ git branch
$ git branch -v
$ git branch
$ git branch -m []
$ git branch -M []
$ git branch -d
$ git branch -D
二十一、git checkout
检出命令,用于创建,切换分支等
$ git checkout
$ git checkout -b
$ git checkout --orphan
$ git checkout
二十二、git cherry-pick
把已经提交的记录合并到当前分支。
$ git cherry-pick
二十三、git add
把要提交的文件的信息添加到暂存区中。当使用git commit时,将依据暂存区中的内容类进行文件的提交。
$ git add
$ git add -u []
$ git add --update []
$ git add -A []
$ git add --all []
$ git add -i []
$ git add --interactive []
二十四、git commit
将暂存区中的文件提交到本地仓库中。
$ git commit
$ git commit -m ""
$ git commit -a -m ""
$ git commit --amend
二十五、git fetch
从远程仓库获取最新的版本到本地的tmp分支上。
$ git fetch
$ git fetch
二十六、git merge
合并分支
$ git merge
二十七、git diff
比较版本之间的差异
$ git diff
$ git diff --cached
$ git diff --staged
$ git diff HEAD
$ git diff
$ git diff
$ git diff ...
二十八、git pull
从远程仓库获取最新版本合并到本地。
首先会执行git fetch,然后执行 git merge,把获取的分支的HEAD合并到当前分支。
$ git pull
二十九、git push
把本地仓库的提交推送到远程仓库
$ git push :
$ git push :
$ git push --delete
三十、git log
把本地仓库的提交推送到远程仓库
$ git push :
$ git push :
$ git push --delete
三十一、git reset
还原提交记录
$ git reset []
$ git reset --mixed []
$ git reset
$ git reset --mixed
$ git reset --soft
$ git reset --hard
三十二、git revert
生成一个新的提交来撤销某次提交,此次提交之前的所有提交都会被保留。
$ git revert
三十三、删除掉本地不存在的远程分支
多人合作开发时,如果远程的分支被其他开发删除掉,在本地执行 git branch --all 依然会显示该远程分支,可使用下列的命令进行删除:
$ git pull -p
$ git fetch -p
$ git fetch --prune origin