一、入门介绍
1. 配置用户和邮箱
git 配置文件存储在三个位置,分别对应系统、用户、项目;
//所有系统用户配置
git config --system user.name 'hzu'
//当前系统用户设置
git config --globle user.name "yourName"
git config --globle user.email youremail@qq.com
//局部设置: 进入项目文件下设置(某一项目)
git config user.name "yourname"
git config user.email youremail@qq.com
//查看配置
git config -l
//查看某一项配置
//git config <key>
git config user.name
git config user.email
2. 获取命令帮助
//格式
//git help <verb>
git help config
二、基础命令
单词:仓库(repository) 跟踪(track) 暂存(stage) 提交(commit) 推送(push) 拉取(pull)
获取git仓库
- 在现有目录中初始化git仓库(对现有的项目进行管理)
git init
git add *.c
git commit -m '提交'
- 克隆现有仓库
git clone 地址
//指定本地仓库的名称
git clone 地址 库名
3.记录每次更新到仓库
//1. 查看当前文件状态
git status
//2. 创建一个文件
echo 'my project' > README
//3. 再次查看会发现 Untracked 下面列出 README这个文件,现在添加跟踪.
//跟踪之后进入暂存区
git add README
//4. 状态简览
git status -s
git status --short
//输出:
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
前面字母对应的意思
字母 | 含义 |
---|---|
右M | 修改未放暂存区 |
左M | 修改并在暂存区 |
A | 新添加到暂存区 |
?? | 新添加未跟踪 |
- 忽略文件
创建.gitignore 文件
#示例
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
- 查看已暂存和已修改
// 查看未暂存的修改:工作区与暂存区的比较
git diff
// 查看已暂存的将要添加到下次提交里的内容
git diff --staged
git diff --cached
- 提交更新
// 1. 这种方式会启动文本编辑器以便输入本次提交的说明
git commit
// 2. 添加提交说明
git commit -m '提交说明'
// 3. 跳过使用暂存区:Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:
git commit -a -m '提交说明'
- 移除文件
// 1. 删除本地文件、跟踪、提交
git rm a.txt
git commit -m 'deleted a.txt'
// 2. 手动删除本地文件后:依旧需要执行
git rm a.txt
// 3. 删除跟踪,但是保留本地文件
git rm --cached a.txt
//⚠️如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母)
- 移动文件
git mv fileName_from fileName_to
//上面一行命令等效下面三个
mv a.txt a
git rm a.txt
git add a
查看提交历史
git log
撤销操作
- 提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了
git commit --amend
//示例
git commit -m 'initial commit'
git add *
git cmmit --amend
//最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
2.取消暂存的文件
git reset HEAD fileName
- 撤消对文件的修改
git checkout -- fileName
远程仓库的使用
- 查看远程仓库
git remote -v
- 添加远程仓库
git remote add <shortname远程仓库的简写引用> <url>
- 从远程仓库中抓取与拉取
git fetch [remote-name]
//抓取所有的远程仓库
git fetch --all
- 推送到远程仓库
git push [remote-name] [branch-name]
git push origin master
- 查看远程仓库
git remote show [remote-name]
git remote show origin
- 远程仓库的移除与重命名
//重命名
git remote rename oldname newname
//移除
git remote rm newname
打标签
- 列出标签
git tag
git tag -l 'v1.8.*'
- 创建标签
标签分为 轻量级标签 和 附注标签;一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。附注标签是存储在 Git 数据库中的一个完整对象。
// 1. 创建附注标签
git tag -a v1.4 -m '这是标签信息'
// 查看标签信息
git show v1.4
// 2. 创建轻量级标签,不加 -a -m
git tag v1.4-lw
- 后期打标签
要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和)
//查看提交
git log --pretty=oneline
git tag -a v.14 478f06(校验和)
- 共享标签
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样 - 你可以运行 git push origin [tagname]
,或者推送所有标签:git push origin --tags
5. 检出标签
如果你想要工作目录与仓库中特定的标签版本完全一样,可以使用 git checkout -b [branchname] [tagname]
在特定的标签上创建一个新分支
git 别名
语法:git config --global alias.别名 命令
例如: git config --global alias.ci commit
三、分支简介
1. 创建分支
$ git branch 分支名
//基于 master 分支建立特性分支
$ git branch sc/ruby_client master
创建完仍在当前分支,git并不会自动切换到新分支中去。想要新建一个分支并同时切换到那个分支上,你可以运行一个带有 -b 参数的 git checkout 命令git checkout -b newbranchName
git log --oneline --decorate
命令查看各个分支当前所指的对象,或git branch -a
2. 切换分支
git checkout branchname
3. 合并分支(冲突需要自己手动解决)
git merge branchName
将branchName 分支的内容合并到当前分支
4. 删除分支
git branch -d branchName
删除名为branchName的分支
5. 查看哪些分支已经合并到当前分支
git branch --merged
6. 查看所有包含未合并工作的分支
git branch --no-merged
7.将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有
git branch -v
8.拉取远程分支内容到本地
git pull
//等效:
git fetch
git merge
9.删除远程分支
git push [origin] --delete [branch-name]
10.变基
10.1 将branch-a的提交变基到master(master上也有提交)上:
git checkout branch-a
git rebase master
git checkout master
git meger branch-a
把a中的提交在master上重新播放,使得master 拥有来a中的提交
10.2 特别的:
//“取出 b 分支,找出处于 b 分支和 a 分支的共同祖先之后的修改,然后把它们在 master 分支上重放一遍”;
git rebase --onto master branch-a branch-b
b中不包含a的提交 在master上重新播放
使用 git rebase [basebranch] [topicbranch]
命令可以直接将特性分支(即本例中的 server)变基到目标分支(即 master)上。
git rebase master server
11. 变基 vs. 合并
总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。
四、服务器上的 Git
1.生成 SSH 公钥
$ssh-keygen
$ cd ~/.ssh
$ ls
authorized_keys2 id_dsa known_hosts
config id_dsa.pub
五、git工具
1. 储藏与清理
git stash
储藏会处理工作目录的脏的状态 - 即,修改的跟踪文件与暂存改动 - 然后将未完成的修改保存到一个栈上,而你可以在任何时候重新应用这些改动。
储藏工作git stash
;将刚刚储藏的工作重新应用:git stash apply
六、git 分支命名建议
分支 | 命名 | 说明 |
---|---|---|
主分支 | master | 主分支,所有提供给用户使用的正式版本,都在这个主分支上发布 |
开发分支 | dev | 开发分支,永远是功能最新最全的分支 |
功能分支 | feature-* | 新功能分支,某个功能点正在开发阶段 |
发布版本 | release-* | 发布定期要上线的功能 |
修复版本 | bug-* | 修复线上代码的 bug |