设置账户
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
SSH登录
$ cd ~/.ssh
$ ssh-keygen -o
$ cat ~/.ssh/id_rsa.pub
初始化仓库
$ mkdir git-learn
$ cd git-learn
$ git init
初始化成功后会生成 .git 目录,.git 目录存放着管理当前目录内容所需的仓库数据。
在git中我们将这个目录内容称为“附属于该仓库的工作树”,文件的编辑操作在文件树中进行,然后记录到仓库中。
查看仓库状态
$ git status
文件树和仓库在被操作中,状态会经常发生改变,可以使用 git status 查看当前状态。
它会反映,文件新建、新的修改、新的提交、冲突等内容。
向暂存区中添加文件
$ touch README.md
$ git add README.md
被提交的文件会进入暂存区,暂存区是提交前的临时区域。
git仓库里新建的文件不会被标记到版本管理对象中,一旦将它加入暂存区,就会加入版本管理对象中,对的修改将会被记录。
清除暂存区所有文件
$ git rm --cached file_path
保存仓库的历史记录
记录一行提交信息
$ git commit -m 'frist commit'
记述详细提交信息
$ git commit
(提交代码至暂存区)
这条命令会自动打开 vim 编辑器,在编辑器中格式如下:
- 第一行:用一行文字简述提交的内容
- 第二行:空行
- 第三行:记述更改的原因和详细内容
记述完毕后使用 :wq
保存并关闭编辑器。
如果想终止提交,将提交信息留白并关闭编辑器。
查看提交后的状态
$ git status
(查看日志)
显示全部提交信息
$ git log
commit 232c154f4f7e914947dc818f604a589dbbd7994a (HEAD -> master)
Author: hys1440248234 <xxxxxx@xx.com>
Date: Mon Nov 19 11:04:27 2018 +0800
frist commit
可以看出谁在什么时间提交的信息
只显示提交信息的第一行
$ git log --pretty=short
只显示指定目录、文件的日志
$ git log README.md
显示文件的改动
$ git log -p
$ git log -p README.md
查看更改前后的差别
$ git diff
显示工作树、暂存区、最新提交之间的差别。
“+”号标记的是新添加的行,被删除的用“-”号标记。
查看工作树与最新提交的差别
$ git diff HEAD
一个好习惯:在每次执行 git commit 前执行 git diff HEAD 查看本次提交与上一次的区别,等确认后再提交。
分支的操作
在并行开发时,往往会存在多个最新代码状态。
每个分支都有其最新的代码,master 是 git 默认的主分支。
从 master 分支创建 feature-A 和 fix-B 分支:
不同分支可以完成不同作业,等完成后再合并。
灵活的运用分支可以使得多人同时高效的进行并行开发。
显示分支一览表
$ git branch
带 *
的是当前所在分支。
分支的创建、切换
创建分支 feature-A:
$ git checkout -b feature-A
切换分支 feature-A:
$ git checkout feature-A
也可以使用以下命令切换回上一个分支:
$ git checkout -
修改 README.md 文件再切换回 master 分支,你会发现 README.md 还是修改前的样子,也就是说各个分支的修改不相互影响。
设置默认分支
设 dev
为默认分支
$ git push --set-upstream origin dev
特征分支
集中实现某一特征(主题),除此之外不再进行任何作业的分支
在日常开发中会创建无数个特征分支,同时再此之外保留一个可以随时发布的稳定分支(通常是 master )。
每个分支只完成其当前的功能,即使出现了 BUG ,也需要新建新的分支,在新的分支下修正。
分支合并
$ git checkout master
$ git merge --no-ff feature-A
以图表形式查看分支
$ git log --graph
回溯历史版本
$ git reset --hard a94784276b2d03832e77a43556fee8785b47889c
查看当前仓库执行过的操作的日志
$ git reflog
提交修改信息
$ git commit --amend
压缩历史-变基
合并分支前发现提交的内容有错误,先提交一个修改,再将这个修改包含到前一个提交中,压缩成一个历史记录。
$ git rebase -i
这部分内容可以看 Git 分支 - 变基。
远端服务器
仓库名与本地保持一致。
创建时不勾选 README 选项,避免重名文件的名字覆盖。
添加到远程服务器
$ git remote add origin https://github.com/hys1440248234/git-learn.git
推送到远端
main 分支(新的默认分支):
$ git branch -M main
$ git push -u origin main
main 分支之外的分支:
$ git checkout -b feature-D
$ git push -u origin feature-D
从远程仓库获取
master 分支:
$ git clone https://github.com/hys1440248234/git-learn.git
master 分支之外的分支:
$ git checkout -b feature-D origin/feature-D
$ git clone https://github.com/hys1440248234/git-learn.git
获取最新的远程分支:
$ git pull origin feature-D
删除远程分支
$ git push origin -d feature-D
$ git branch -D feature-D
修改已经提交的记录
$ git rebase -i HEAD~3
# 如果你要修改哪个,就把那行的pick改成edit,然后保存退出
$ git commit --amend
$ git rebase --continue
.gitignore规则不生效
.gitignore
只能忽略那些原来没有被 track
的文件,如果某些文件已经被纳入了版本管理中,则修改 .gitignore
是无效的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached FilePath
git add FilePath
git commit -m 'update .gitignore for ignore FileName'
参考
【1】GitHub 入门与实践
【2】猴子都能懂的Git入门