GIT 学习
Windows 安装 git
下载 https://git-scm.com/downloads 安装无脑下一步
设置名字,邮箱
1 | git config –global user.name “Xpand” |
git config 命令的 –global 参数,用了这个参数,表示这台机器上所有仓库都会使用这个配置,当然也可以单独给每个仓库配置
创建仓库
1 | cd f: 进入 f 盘 |
$ git init 设置这个目录 Git 可以管理的仓库
1 | Initialized empty Git repository in F:/gitxuexi/.git/ |
仓库创建会生成.git 目录,但目录是隐藏的,可以用 ls -ah
命令查看
注意:Windows 自带的记事本会在每个文件开头添加了 0xefbbbf(十六进制)的字符
添加到仓库
编写一个 readme.txt 文件,
添加 git add readme.txt
到仓库
提交 git commit -m
“提交说明”
时光穿梭机
修改文件内容
git status 运行查看仓库状态会提示你文件被修改过,但没有准备提交的修改。
git diff 查看具体被改动的地方
版本回退
git log
查看历史记录git log –pretty=oneline
查看简略记录
上个版本用 HEAD^ 表示,上上个版本用 HEAD^^ 表示,前 100 版本用 HEAD~100
回退命令 git reset –hard HEAD^
回到最新 git reset –hard
<代表版本号的哈希值>git reflog
用来记录你每一次命令
工作区和暂存区
git add
命令实际上就是把要提交的所有修改改到暂放区,然后,执行 git commit
就可以一次性把暂存区的所有修改提交到分支。
管理修改
git diff HEAD – readme.txt
git diff HEAD –
<需要比较的文件>
Git 是跟踪修改的,每次修改,如果不用 git add 到暂存区,那就不会加入到 commit 中
撤销修改
git checkout – readme.txt
git checkout –
<需要撤销的文件>git reset HEAD
<需要丢弃修改文件>
撤销修改
删除文件
命令 git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
远程仓库
创建 SSH Key
1 | ssh-keygen -t rsa -C “admin@qwas.top“ |
添加远程库
从电脑上连接到 github 仓库上
1 | git remote add origin git@github.com:xiaopengand/xpand.git |
把本地库推送到远程库上
1 | git push -u origin master |
把本地库的内容推送到远程,用 git push
命令,实际上是把当前分支 master 推送到远程。
由于远程库是空的,我们第一次推送 master 分支时,加上了 - u 参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令:
git push origin master
把本地 master 分支的最新修改推送至 GitHub,现在,你就拥有了真正的分布式版本库!
这里遇到了一个问题,花了我半天时间,
连不上
最后发现只是公司 ip 被墙了,用自己流量就行了,就这花了我半天时间。
远程仓库克隆
1 | git clone <远程仓库地址> |
分支管理
创建与合并分支
查看分支:git branch
创建分支:git branch
<需要创建分支名>
切换分支:git checkout
<需要切换的分支> 或 git switch
< 需要切换的分支 >
创建 + 切换分支:git checkout -b
或 git switch -c
合并某分支到当前分支:git merge
删除分支:git branch -d
解决冲突
当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把 Git 合并失败的文件手动编辑为我们希望的内容,再提交。
用 git log –graph
命令可以看到分支合并图。
分支管理策略
git merge –no-ff -m
“更新说明” < 合并分支名 >
合并分支时,加上–no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出曾经做过合并,而 fast forward 合并就看不出来曾经做过的合并。
Bug 分支
但手头分支没有完成时,先把工作现场 git stash
一下,然后去其他分支修复,再 git stash pop
,回到工作现场;再 master 分支上修复 bug,想要合并到当前 dev 分支,可以用 git cherry-pick
命令,把 bug 提交的修改 “复制” 到当前分支,避免重复劳动。
Feature 分支
开发一个新的 feature,最好新建一个分支
如果要丢弃一个没有被合并过的分支,可以通过 git branch -D
<需要强制删除的分支名> 强行删除。
多人协作
查看远程仓库:git remote
或者用 git remote -v
显示更详细的信息
显示了 push 说明有推送权限
推送分支:git push origin master
推送其他分支:git push
<远程仓库名称> < 其他分支名称 >
抓取分支
远程克隆:git clone
仓库地址git branch
查看分支git push origin dev
推送 dev 分支到远程git checkout -b dev origin/dev
创建远程 origin 的 dev 分支到本地
- 首先,可以试图用
git push origin
推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin
推送就能成功!
如果 git pull 提示 no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream-to origin/
小结
查看远程库信息,使用 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 pull
,如果有冲突,要先处理冲突.
Rebase
rebase 操作可以把本地未 push 的分叉提交历史整理成直线;
rebase 的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
标签管理
创建标签
创建标签:git tag
查看标签:git tag
给历史记录打上标签:git tag
查看标签信息:git show
创建带有说明的标签,用 - a 指定标签名,-m 指定说明文字:git tag -a v0.1 -m
” 标签说明 “
操作标签
删除标签:git tag -d
推送标签到远程仓库:git push origin v1.0
一次性推送全部标签:git push origin –tags
如果删除远程标签:
先删除本地 git tag -d
然后从远程删除,删除命令也是 push,但格式如下:git push origin :refs/tags/
使用 GitHub
使用 Gitee
使用命令 git remote add origin
<仓库地址>
使用 gir remote add
时报错
说明本地库已经关联了一个名叫 origin 的远程库,此时,可以先用 git remote -v
查看远程信息
删除已有的 github 远程库:git remote rm origin
再关联 Gitee 的远程库git remote add origin
<gitee 仓库地址>
通过 git push 命令就可以把本地库推送到 Gitee 上。
一个本地库同时关联到 GitHub,又关联 Gitee
1 | git remote add github` <github 仓库地址> |
自定义 Git
git config –global color.ui true
这样,Git 会适当地显示不同的颜色。
忽略特殊文件
忽略文件的原则是:
- 忽略操作系统自动生成的文件,如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没有必要放进版本库,比如 Java 生成的.class 文件;
- 忽略你自己带有敏感信息的配置文件,如存放口令的配置文件。
在 Git 工作区下的根目录创建一个特权的.gitignore 文件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件。GitHub 上有各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:配置文件地址 https://github.com/github/gitignore
如果你确实添加该文件,可以用 - f 强制添加到 git:git add -f
或者你发现,可能是.gitignore 写的有问题,需要找出来到底哪个规则写错了,可以用git check-ignore
命令检查,-v 参数查看具体:git check-ignore -v
把指定文件排除在.gitignore 规则外的写法就是!+ 文件名。
配置别名
git config –global alias.st status
输入 git st
表示 git status–global
参数是全局参数,也就是这些命令在这台电脑的所有 Git 仓库下都有用。
甚至还有人丧心病狂地把 lg 配置成了:
配置 Git 的时候,加上–global 是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
配置文件放哪了?每个仓库的 Git 配置文件都放在.git/config 文件中:
别名就在 [alias] 后面,要删除别名,直接把对应的行删掉即可。
而当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件.gitconfig 中: