1. 安装
安装完成后,需要一步设置,在命令行中输入:
git config --global user.name "name"
git config --global user.email "[email protected]"
如果使用了 git config 命令的 --global 参数,则这台机器上的所有 Git 仓库都会使用这个配置,可以单独对某个特定的仓库设定不同的用户名和邮箱地址。
2. 创建版本库
在需要的目录下使用
git init 命令
为避免出现问题,包括根目录在内的多级目录名都不要使用中文。
使用上述命令后,会创建一个空的仓库,并且目录下会多出一个 .git 目录,这个目录是 Git 用来跟踪管理版本库的。
3. 添加,提交,查看状态,对比不同
git add
告诉 Git ,把文件添加到仓库
git commit
把文件提交到仓库
git commit -m "first commit"
把文件提交到仓库,并添加说明
git status
查看当前仓库的状态
git diff
查看 difference ,可以看出做了什么修改
4. 版本回退
git log
显示从最近到最远的提交日志
git log --pretty=oneline
用于显示提交日志,避免太多内容,简洁显示
git reset --hard HEAD^
用于版本回退,上一个版本就是 HEAD^,上上个版本就是 HEAD^^,往前一百个版本则可以写成 HEAD~100
git reset --hard 1094a
版本回退至指定 ID 的版本
git reflog
用来记录你的每一次命令
5. 工作区和暂存区
工作区:就是我们电脑中看到的目录
版本库:工作区中存在的 .git 目录,则是 Git 的版本库,版本库中最重要的就是 stage(或者叫 index) 的==暂存区==
git diff HEAD --readme.txt
可以查看工作区和版本库里面最新版本的区别
每次提交,需要先将修改 add 到暂存区,然后再 commit 到版本库
6. 撤销修改
git checkout -- file
可以丢弃工作区的修改,此时分两种情况:
第一种:此文件自修改后还没放到暂存区,撤销修改则回到和版本库一模一样的状态;
第二种:此文件已经添加到暂存区后又发生了修改,则撤销修改回到添加暂存区后的状态。
总结:就是让这个文件恢复到上一次 commit 或 add 的状态。
git reset HEAD file
可以把暂存区的修改撤销掉,重新放回工作区
7. 删除文件
如果你工作区中删除了某个文件,则工作区就和版本库不同了,通过 git status 则可以查看哪些文件被删除了,此时你有两个选择:
第一:如果你确实要在版本库中删除这个文件,那就用命令 git rm 删掉,并且 git commit
第二:如果是误删,则可以丢弃工作区的修改,使用 git checkout -- file 将误删的文件恢复
8. 远程仓库
本地 Git 仓库和 GitHub 仓库之前传输可以通过 SSH 加密进行。则需要一些设置:
第一步:创建 SSH Key。 在用户目录下,看看有没有 .ssh 目录,如果有,则看此目录下有没有 id_rsa 和 id_rsa.pub 这两个文件,如果有,则跳到下一步。如果没有,则打开 Shell(Windows 下打开 Git Bash),创建 SSH Key:
ssh-keygen -t rsa -C "email"
然后一直回车就可以了,顺利的话,则可以在用户目录下看到 .ssh 目录,并且有 id_rsa 私钥和 id_rsa.pub 公钥
第二步:登录 GitHub ,打开 “Account settings”,“SSH Keys”页面:然后点击“Add SSH Key”,填上任意 Title,在 Key 文本框里黏贴 id_rsa.pub 文件的内容,点击 “Add Key”即可看到添加的 Key
假如你有多台电脑,则可以将你每台电脑的公钥添加到 GitHub 上,则就可以在每台电脑上进行推送了。
关联远程库,使用,命令:
git remote add origin git@server-name:path/repo-name.git
第一次推送本地库到远程库的时候,由于远程库是空的,则用
git push -u origin master
在第一次推送的时候,Git 不但会把本地的 master 分支推送到远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取的时候,就可以简化命令了。
git push origin master 即可
git clone
克隆远程仓库
9. 分支管理
-
如果一开始的时候,只有 master 一条分支,则 master 指向最新的提交,而 HEAD 则指向 master,这样就确定了当前的分支以及当前的提交点。
你每做一次提交,master 分支就会向前移动一步,随着不断提交,master 分支的线会越来越长。
- 如果此时我们创建一个分支 dev,则 Git 会创建一个指针 dev,指向 master 相同的提交,再把 HEAD 指向 dev,表明当前分支为
-
如果在此基础上,你又做了一次提交,则 dev 指针向前移动一步,而 master 指针不变。
如果在 dev 上开发结束了,则可以吧 dev 合并到 master 上,Git 上的合并,最直接的方法就是直接吧 master 指向 dev 的当前提交,即可完成合并。
如果将上述过程换成实际操作,则为:
创建 dev 分支
git checkout -b dev
注:git checkout 命令加上 -b 则表示创建并切换,相当于如下两条命令:
git branch dev
git checkout dev
使用 git branch 命令可以查看当前分支
在 dev 分支上做了修改之后,使用 add ,然后 commit 将修改提交到 dev 分支,
然后 git checkout master 切换到 master 分支,使用 git merge dev 将 dev 分支合并到 master 分支上。
如果使用完分支之后,想要删除分支,则可以使用 git branch -d dev 将 dev 分支删除。
10. 冲突解决
如果主分支 master 和 dev 分支同一文件都做了修改,然后合并 dev 分支的时候就会出现冲突,
解决冲突就是把 Git 合并失败的文件手动编辑为我们希望的内容,再提交。
用 git log --graph 命令可以看到分支合并图。
11. 分支管理策略
通常,合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用 Fast forward 模式,Git 就会在 merge 的时候生成新的 commit,这样就可以从分支历史上看到分支信息。
git merge --no-ff -m "merge with no-ff" dev
实际开发中,我们应该遵循:
- master 分支应该是非常稳定的,也就是用来发布新版本的,平时不能在上面干活。
- 平时干活都在 dev 分支上,dev 分支是及其不稳定的,当需要发布的时候,把 dev 分支合并到 master 上,在 master 分支发布版本。
-
你和你的同事每个人都在 dev 上干活,每个人都有自己的分支,时不时往 dev 分支上合并就可以了。
12. Bug 分支
如果你在分支 dev 上进行开发的时候,测试部门测试出 master 上有 bug,需要你立即修复一下,而你当前还在 dev 上开发,没有进行提交,因为工作只进行了一般,还没法提交,则此时就可以使用
git stash
将当前工作现场“储存”起来,等以后恢复现场继续工作。
此时你可以切换到 master 上,然后创建一个修复 bug 的临时分支,然后修复后,add 、commit 到临时分支上,然后在 master 上 merge 一下。
修复完 bug 后,你切换到 dev 分支上继续干活,你之前将内容“储存”起来了,你有两种方式可以将它恢复:
- 使用 git stash apply 恢复,但是恢复之后,stash 内容并不删除,你需要继续使用 git stash drop 来删除。
- 使用 git stash pop ,恢复的同时也可以把 stash 内容删除了。
使用 git stash list 可以查看目前所有的 stash 内容。
使用 git stash apply stash@{0} 可以恢复指定 stash 内容。、
如果要丢弃一个没有被合并过的分支,通过:
git branch -D name
13. 多人协作
远程仓库的默认名称是 origin
查看远程库的信息,可使用:
git remote 或者使用 git remote -v 显示更详细的信息。
推送分支:
git push origin master
推送其他分支
git push origin dev
并不是所有分支都要推送到远程仓库,如果选择呢?
- master 分支是主分支,因此要时刻与远程同步
- dev 分支是开发分支,所有的成员都要在上面进行工作,所以也需要与远程同步
- bug 分支只用于本地修复 bug,没必要推送到远程分支,除非有需要记录修复了多少个 bug
抓取分支
创建本地分支
git checkout -b dev origin/dev
本地分支和远程分支建立链接关系
git branch --set-upstream-to
注:
多人协作工作模式:
- 首先,可以试图用 git push origin
推送到远程分支 - 如果推送失败,则因为远程仓库比你的本地仓库新,则需要先进行 git pull 进行合并
- 如果合并冲突,则解决冲突,并在本地提交
- 没有冲突或者解决完冲突后,在使用 git push origin
进行推送 - 如果 git pull 的时候提示 no tracking information,则说明本地分支和远程分支没有建立联系,则用命令 git branch --set-upstream-to
origin/
14. 标签管理
Git 中打标签,切换到指定分支,执行:
git tag v1.0
使用 git tag 可以查看所有标签
git tag v0.9 f43434
可以对指定的 id 打 tag
git tag -a v0.1 -m "message" f3434
创建带有说明的标签 -a 指定标签名称
-m 指定说明信息
git tag -d v0.1 可以删除错误标签
git push origin v1.0 可以将指定的 tag 推送到远程仓库
git push origin --tags 可以将所有的 tag 一次性推送到远程仓库
git push origin :refs/tags/v0.9 可以将 tag 从远程删除
15. 一个本地库同时关联多个远程库
git remote rm origin
先删除已关联的名为 origin 的远程库
git remote add github [email protected]:keven/learn.git
关联 Github 的远程仓库
git remote add gitee [email protected]:keven/learn.git
关联码云的远程库
git push github master
git push gitee master
推送到远程
16. 自定义配置 Git
让 Git 命令显示颜色
git config --global color.ui true
忽略特殊文件
在 Git 目录下新建 .gitignore 文件,然后把需要忽略的文件添加进去即可。可以参考 GitHub 地址:https://github.com/github/gitignore
.gitignore 文件本身要放到版本库中,并且可以对 .gitignore 做版本管理。