Git初阶:入门及常用命令
Git初阶:入门&常用命令
- 讲师:×××
课程内容:
- 介绍版本控制以及Git
- Git基本概念以及工作流
- Git部分常见问题
- Git常用命令
- Git开发示例
1 / 版本控制以及Git
git:分布式版本控制系统,进行版本控制
集中式版本控制如SVN,存储每个文件的变化,效率低
- Git保存的是快照,SVN保存的是文件的变化.
- Git几乎所有的操作都可以在本地完成,SVN需要与服务器通讯以获得其他版本的文件.
- Git对文件内容使用SHA-1 hash生成提交版本号,可以保证文件内容的完整性,而SVN使用递增的编号作为版本号.
2 / Git工作流
GIT的三种状态
- 已修改(modified) → 工作区
↓ add ↓ - 已暂存(staged) → 暂存区
↓ commit ↓ - 已提交(commited) → 本地仓库
fetch↑↓push
远程仓库
GIT的三个区域
生成本地秘钥 在gitlab中add公钥:小人儿->SSH Key->Addgitignore:忽略提交文件
如果有一些文件/目录不想提交到git,可以通过编辑.gitignore文件进行设置。
例如:不提交 logs下的所有文件/目录
vim .gitignore
编辑:忽略下列文件
# kdiff3 ignore
*.orig
# maven ignore
target/
# eclipse ignore
.settings/
.project
.classpath
# idea ignore
.idea/
*.ipr
*.iml
*.iws
# temp ignore
*.log
*.cache
*.diff
*.patch
*.tmp
3 / Git常用命令
-
init
clone
remote
status
log
reflog
config
add
commit
fetch
pull
push
rm
stash
branch
checkout
merge
diff
reset
revert
rebase
cherry-pick -
init
创建一个空的本地仓库或者重新初始化一个已经存在的仓库;会生成一些默认文件。 -
clone
克隆远程仓库到本地目录。克隆到本地仓库的分支名默认为origin。
-
remote
管理相关的远程仓库。push/pull都和这个远程仓库相关。git remote add origin <项目地址> 将本地项目与远程仓库关联 git remote 查看已经关联的远程仓库 git remote -v 查看已经关联的远程仓库的详细信息 git remote --help 查看帮助文档 比如查看到:git remote rename <old> <new> git remote origin origin2 将origin重命名为origin2
-
**status **
显示工作区域的状态
- **log **
(只)记录提交日志,查看分支的提交历史;同时存在本地和远程仓库
- **reflog **
记录所有(是所有的)分支的所有操作,只存在于本地仓库;在不同的分支下执行,看到的是不同分支下的操作日志。
-
config
修改Git配置信息
git config --add user.name "zhang3" 增加用户名
git config --add user.email "zhang3@163.com" 增加用户邮箱
git config -e 查看配置信息
help的例子
通过 git config --help查阅到:
可以看到:
命令参数 --remove-section
格式:git config [--local|--global|--system] --remove-section section
使用这个命令,不仅可以删除一个没有内容的section,而且即使该section下面有内容,也会一起删除掉
比如我们来删除这样一个配置:
首先增加一个配置 dog
git config --local dog.name "dog1"
git config --local dog.email "dog1.email"
git config -e 查看是否添加完成
dog配置完成
执行:
git config --local --remove-section dog
发现成功移除。
-
**add **
工作区提交到暂存区 -
**commit **
暂存区提交到本地仓库 -
**fetch **
拉取远程仓库到本地仓库,见pull。 -
**merge **
合并分支,见pull。
用git merge处理冲突
冲突:不同仓库向远程仓库push代码,一些被同时修改的文件将产生冲突:选哪个合并到远程分支?
此时git提示pull,pull后提示冲突,自动合并失败。
git merge遇到冲突可以怎么做:
(1) 修改冲突再提交
(2) git merge --abort取消冲突合并,回到合并前的状态
(3) git status查看工作区状态,根据提示一步一步来
vim冲突文件:
<<<HEAD和===之间的是本地提交的;===和>>>之间是别人提交的采用一方的,再push,
-
**pull **
拉取远程仓库到本地仓库并合并到本地分支(git fetch + git merge,两个命令的组合)使用fectch:将远程的branch2分支拉取到本地origin/branch2分支,但不会影响本地branch2
分支;使用merge:讲本地origin/branch2分支合并到本地branch2分支;
使用pull:相当于先执行fectch,在执行merge。
- **push **
将本地仓库的内容推送到远程仓库
如果本地分支与远程分支不对应,git并不知道要将本地分支推送到远程的哪一个分支上,因此通过下面的命令建立本地分支与远程分支之间的关系,将二者绑定,从而每次推送时都有一个对应关系。
将本地branch2分支设置为追踪来自远程分支origin的分支,本地分支branch2与远程分支origin建立起了绑定关系
git push -u origin branch2
- **rm **
- stash
-
branch
管理分支git branch 列出当前分支 git branch <分支名> 新建分支 git branch -d <分支名> 删除分支 git branch -v 查看分支详细信息
-
**checkout **
切换分支或还原文件
git checkout <分支名> 切换分支
git checkout -b <分支名> 创建分支并切换
还原文件
(1)还原成暂存区的内容
git checkout -- <文件名>
(2)还原成某个版本的内容
git checkout <版本号> <文件名>
(3)还原成前x次提交
HEAD:表示当前提交
HEAD~:表示前一次提交
HEAD~x:表示前x次提交
git checkout HEAD~ <文件名> 还原成前一次提交
-
**diff **
显示不同提交 / 不同工作区域 / 不同分支之间的差别不同工作区域之间: git diff 如果没有显示,表示没有差别 git diff --cahcaed 对比暂存区和本地仓库之间的差异;如果没有差异则也不会任何print 不同提交之间: git diff <log中的提交hash1> <log中的提交hash2> 例子: git log 查看提交日志
git diff 2d8629e3d589 2bd281970f1aef4
两次提交之间的differents
比较不同分支之间的差别
git diff master branch
-
**reset **
重置HEAD到指定的状态git reset --mixed HEAD~ 将本地仓库上一个版本的内容拷贝到暂存区,而不修改工作区的内容 git reset --hard HEAD~ 将本地仓库上一个版本的内容拷贝到暂存区和工作区;删除不可逆,要谨慎操作 git reset --soft HEAD~ 将HEAD指向上一个提交
多选题:如何将当前提交指向上一次提交,并仅仅覆盖暂存区的内容:
A. git reset --hard HEAD~
B. git reste HEAD~
C. git reset --mixed HEAD~
D. git reset --softed HEAD~
(BC)
-
**revert **
撤销一些已经存在的提交git revert <版本号> ,将被当做一次单独的提交
-
rebase
用于把一个分支的修改合并到当前分支 -
cherry-pick
用于把某次提交的内容合并到当前分支