Git的使用手册
Git的简介
-
Git是一个快速,可扩展的分布式版本控制系统,有利于将一个大任务分解,进行本地的多次提交。
-
每一个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力。因此,不用依赖网络也可以查看,修改代码。
工作目录:包含.git文件夹的目录,主要用来存放代码。
-
Git只需要进行分支的切换即可达到在某个分支上工作的效果。
-
分布式原理图
Git比较重要的概念
工作区
就是我们能看到的目录,如下图的黄色区域。
版本库
如蓝色所示,是一个隐藏文件,不属于工作区,是Git的版本库。
版本库存放了很多东西,例如:
- 暂存区(index):像个缓存区域,临时保存你的改动
- HEAD:指向你最近一次提交后的结果
总结
Git最基本操作命令(开发一整套流程)
获取代码->修改->提交代码->推送到远程仓库
获取代码
- git clone XXX【地址】
修改,提交代码
-
本地修改后(增删改查)后,把它们添加到缓存区
git add <filename文件名> git add . #添加当前目录下的所有工作
-
若要删除文件
git rm <filename文件名>
-
使用以下命令进行实际提交
git commit -m "备注信息"
此时,代码已经提交到了本地仓库,但是还没有到远程仓库。
推送到远程仓库
git push <remote-name> <local-branch-name>
git push origin master #将本地的master分支推送到远端
补充
-
设置用户签名
git config --global user,name xsy #区分不同操作者身份,以此确认本次提交是谁做的 git config --global user.email xsy@qq.com # 这里设置用户签名和将来登录Github的账户没任何关系
-
初始化本地库
git init #初始化后会生成一个隐藏文件.git
-
查看本地库状态
git status #红色:没有提交到缓存区。绿色:提交到缓存区
Git更新远程仓库最新代码
每天上班第一件事要记得拉取远程最新的代码到本地仓库哦~
git pull origin <branch> #更新远程仓库的branch分支到本地
Git分支,合并操作
需要并行开发时,需要创建分支。创建仓库的时候,master是默认的。可以在其他分支上进行开发,完成后再将它们合并到主分支上。
创建,合并本地分支
- 创建一个叫feature_x的分支,并切换过去
git checkout -b feature_x
- 切换回主分支
git checkout master
- 将新建的"feature_x"合并到master分支
git merge feature_x
- 注意:
- git checkout < branch-name> 命令不带-b参数,是切换到已存在的本地分支。
- 用以下命令查看已存在的分支
- git branch #查看本地分支
- git branch -a #查看所有分支,包括远端,remote/origin前缀的是远端分支
推送本地分支
git push origin feature_x #远端也有feature_x分支了
删除分支(先不管)
git branch -d xx
检出远端分支(啥意思)
若需要检出别人已经推送到远端仓库的"feature_x"分支到本地"feature_x"分支:
git checkout -b feature_x --track origin/feature_x
Git的高级操作
查看日志
git log #查看所有历史版本信息
git log -n #查看前n个历史版本信息
git log -p #查看具体变动
git log --stat #显示简要的增改行数统计,每次提交文件的变更统计
git log --pretty=oneline #一行显示,只显示哈希值和提交说明
git log --pretty=format:"" #控制显示的记录格式
Git比较操作
git diff #工作区和暂存区比较
git diff cached #比较暂存区和HEAD的文件差异
git diff HEAD #工作区和HEAD的比较
git diff jkdshjhf skfjs #查看某两个版本之间的差异
git diff <source_branch> <target_branch> #查看分之间的差异
git diff jdkshjkd:filename jkahjk:filename #查看某两个版本的某个文件之间的差异
回滚操作
-
commit前的回滚操作
git checkout --<filename> #放弃你在工作区中指定文件的修改 git checkout --<filename> #放弃你在工作区中的所有修改? git clean -df #放弃在工作区中添加的文件和目录(untracked file/dirs) git reset HEAD #将已经在暂存区的改动返回到工作目录(unstage) git reset --hard HEAD #将已经在暂存区的改动全部放弃,暂存区和工作区的内容被HEAD覆盖
-
commit后的回滚操作
git commit --amend #上次提交的补救模式,不会产生新commit git revert <commit-id> #回滚中间的某次commit,会产生新commit,适用于对远端历史的回滚(不会改变远端历史) git reset HEAD^ #回退所有内容到上一个版本,改动放到工作区 git reset soft HEAD^ #回退所有内容到上一个版本,改动放到暂存区 git reset hard HEAD^ #回退所有内容到上一个版本,改动部门删除 git reset HEAD^ filename.py #回退filename这个文件的版本到上一个版本
如何解决冲突
以下是解决 Git 冲突的基本步骤:
- 在终端中进入你的 Git 项目目录。
- 运行 git status 命令,查看哪些文件存在冲突。冲突的文件将被标记为“both modified”。
$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
Changes to be committed:
modified: file1.txt
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
both modified: file2.txt
- 打开包含冲突的文件,并寻找类似于下面的内容:
<<<<<<< HEAD
This is some content added by you.
=======
This is some content added by someone else.
>>>>>>> other-branch
- 解决冲突。在上面的示例中,你需要决定保留哪些内容。可以将文件修改为:
This is some content added by both of us.
- 保存并关闭文件。
- 运行 git add 命令,以标记文件已解决:
$ git add file2.txt
- 运行 git commit 命令提交更改:
$ git commit -m "Resolve conflict in file2.txt"
- 如果你已经解决了所有的冲突,运行 git push 命令将更改推送到远程仓库:
$ git push