1 Git 起步
1.1 运行 Git 前的配置
?安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
$ git config --global user.name <用户名>
$ git config --global user.email <用户邮箱>
1.2 检查配置信息
$ git config --list
$ git config <key>
1.3 Git 命令帮助
$ git <command> -h
1.4 Git 的三种状态
- 已修改
modified :表示修改了文件,但还没保存到数据库中。 - 已暂存
staged :表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。 - 已提交
committed :表示数据已经安全地保存在本地数据库中。
所以 Git 项目拥有三个阶段:工作区 Working Directory 、暂存区 Staging Area 以及 Git 仓库 Repository
2 Git 基础
2.1 获取 Git 仓库
在已存在目录中初始化仓库
$ git init
$ git init [project-name]
该命令将创建一个名为 .git 的子目录,这个子目录含有初始化的 Git 仓库中所有的必须文件。
克隆现有的仓库
$ git clone <url>
$ git clone <url> <project-name>
2.2 记录每次更新到仓库
查看所有文件状态
$ git status
未跟踪的工作区文件
$ touch <file>
使用 git status 查看,输出日志中该文件显示为红色,且在 Untracked files 下面,表示文件在工作区。
添加文件到暂存区 / 跟踪新文件
$ git add <file>
$ git add .
使用 git status 查看,输出日志中该文件显示为绿色,且在 Changes to be committed 下面,表示文件被添加到暂存区。
删除暂存区文件
$ git rm --cached <file>
用 git status 查看文件为红色,文件从暂存区删除,但是工作区的文件还在。
文件重命名
$ git mv <old file> <new file>
提交文件
在此之前,请务必确认还有什么已修改或新建的文件还没有 git add 过, 否则提交的时候不会记录这些尚未暂存的变化。所以,每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了。如果文件都暂存了,要运行提交命令 :
$ git commit -m "<commit message>"
$ git commit -m "<commit message>" <file>
$ git commit -a
$ git commit -v
$ git commit --amend -m "<commit message>"
2.3 查看提交历史
$ git reflog
$ git log
$ git log --oneline
$ git log --graph
$ git log -5 --pretty --oneline
$ git log --oneline --before={1.weeks.ago}
$ git log --oneline --after={2022-07-01}
$ git log -p -n
$ git diff
$ git diff HEAD
$ git diff --cached <file>
$ git diff <first-branch>...<second-branch>
2.4 撤销
$ git checkout <file>
$ git checkout
$ git reset <file>
$ git reset --hard
$ git reset --hard <commit>
2.5 暂存
$ git stash
$ git stash pop
2.6 远程仓库的使用
查看远程仓库
$ git remote
$ git remote -v
$ git remote show <remote>
添加远程仓库
$ git remote add <shortname> <url>
从远程仓库中抓取与推送
$ git fetch <remote>
$ git pull <remote> <branch>
$ git push <remote> <branch>
$ git push <remote> <local branch>:<remote branch>
$ git push <remote> <branch>
$ git push <remote> --force
$ git push <remote> --all
远程仓库的重命名
$ git remote rename pb pc
远程仓库的移除
$ git remote remove pc
2.7 Git 标签
$ git tag
$ git tag -l <pattern>
$ git tag -l "v1.1*"
$ git tag <tag>
$ git show <tag>
$ git tag -d <tag>
$ git push <remote> <tag>
$ git push origin --tags
3 Git 分支
3.1 管理分支
$ git branch -r
$ git branch -a
$ git branch --merged
$ git branch --no-merged
3.2 创建和切换分支
$ git branch -r
$ git branch -a
$ git branch <branch>
$ git checkout -b <branch>
$ git checkout -
3.3 合并分支
当我们在 master 的 iss7 分支上工作时,系统突然出现一个紧急问题需要解决。我们不希望这个紧急问题和 iss7 的修改混在一起:
$ git checkout master
$ git checkout -b hotfix
紧急问题在 hotfix 解决后,如果要将 hotfix 分支合并回 master 分支:
$ git checkout master
$ git merge hotfix
3.4 删除分支
如果要删除已合并的 hotfix 分支:
$ git checkout master
$ git branch -d hotfix
如果要删除未合并的 hotfix 分支,使用 git branch -D <branch> 命令删除
3.5 合并冲突
合并分支的过程中,如果两个分支都修改过同一个文件的相同地方,通常会产生冲突。使用 git status 查看产生冲突的具体文件下面的内容显示(假设是 index.html 文件 )。 用编辑器打开冲突文件,你会发现有冲突的地方是下面这样:
$ git status
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">please contact us at support@github.com
</div>
>>>>>>> iss7:index.html
Git 用 <<<<<<<< 符号、======= 符号和 >>>>>>> 符号标注每一处冲突,===== 上半部分代表 HEAD (即 master 分支)的内容,下半部分代表 iss7 分支的内容。为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一部分,或者你也可以自行合并这些内容:
<div id="footer">
please contact us at email.support@github.com
</div>
上述的冲突解决方案仅保留了其中一个分支的修改,并且 <<<<<<< , ======= , 和 >>>>>>> 这些行也需要被手动删除。 在你解决了所有文件里的冲突之后,对每个冲突文件使用 git add 命令来将其标记为冲突已解决。 一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决
|