Windows 安装 git

下载 https://git-scm.com/downloads 安装无脑下一步

设置名字,邮箱

1
2
git config –global user.name “Xpand”
git config –global user.email “admin@qwas.top”

git config 命令的 –global 参数,用了这个参数,表示这台机器上所有仓库都会使用这个配置,当然也可以单独给每个仓库配置

创建仓库

1
2
3
4
cd f: 进入 f 盘
mkdir gitxuexi 创建 gitxuexi 文件夹
cd gitxuexi 进入 gitxuexi 文件夹
pwd 查看当前目录

$ 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 -bgit 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 分支到本地

  1. 首先,可以试图用 git push origin 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用 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
2
3
4
git remote add github` <github 仓库地址>
git remote add gitee` <gitee 仓库地址>
git push github master
git push gitee master`

自定义 Git

git config –global color.ui true
这样,Git 会适当地显示不同的颜色。

忽略特殊文件

忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没有必要放进版本库,比如 Java 生成的.class 文件;
  3. 忽略你自己带有敏感信息的配置文件,如存放口令的配置文件。
    在 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 中:

搭建 Git 服务器

文章参考 https://home.x-wan.top/archives/git-server