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的三个区域
一般开发流程
  • 创建仓库/从远程仓库克隆
  • 创建并切换到特性分支
  • 创建/修改文件
  • 提交工作区文件到暂存区
  • 提交暂存区文件到本地仓库
  • 切换到主干分支
  • 合并特性分支到主干分支
  • 推送本地仓库到远程仓库
git开发示例
git clone [email protected]:wanlonghub/FirstProject.git 克隆远程代码库
git branch 查看当前分支
git checkouyt -b dev3 新建并切换到dev3分支
vim newfile 新建文件
git status 查看文件状态
git add newfile 增加文件到暂存区
git commit -m "new files" 将文件由暂存区增加到本地仓库
git push -u origin dev3 将本地分之推送到远程服务器
git diff 查看不同分支的区别
git merge  origin master 合并分支
gitlab开发示例

推送过程免密码:由http连接方式切换到SSH链接方式,增加SSH-KEY,即增加本地ssh公钥到gitlab中。

ssh-keygen
生成本地秘钥
在gitlab中add公钥:小人儿->SSH Key->Add
gitignore:忽略提交文件

如果有一些文件/目录不想提交到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。

远程分支branch2克隆到本地后,成为本地的origin/branch2分支
  • remote
    管理相关的远程仓库。push/pull都和这个远程仓库相关。

    git remote add origin <项目地址> 将本地项目与远程仓库关联
    
    git remote 查看已经关联的远程仓库
    
    git remote -v 查看已经关联的远程仓库的详细信息
    
    git remote --help 查看帮助文档
    比如查看到:git remote rename  
    git remote origin origin2 将origin重命名为origin2
    
  • **status **
    显示工作区域的状态

  • **log **
    (只)记录提交日志,查看分支的提交历史;同时存在本地和远程仓库
哈希值 - 作者 - 时间
  • **reflog **
    记录所有(是所有的)分支的所有操作,只存在于本地仓库;在不同的分支下执行,看到的是不同分支下的操作日志。
  • config
    修改Git配置信息
    git config --add user.name "zhang3" 增加用户名
    git config --add user.email "[email protected]" 增加用户邮箱
    git config -e 查看配置信息

help的例子
通过 git config --help查阅到:

移除某个file-option下的section

可以看到:

命令参数 --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冲突文件:

<<>>之间是别人提交的

采用一方的,再push,

  • **pull **
    拉取远程仓库到本地仓库并合并到本地分支(git fetch + git merge,两个命令的组合)

    使用fectch:将远程的branch2分支拉取到本地origin/branch2分支,但不会影响本地branch2
    分支;

    使用merge:讲本地origin/branch2分支合并到本地branch2分支;

    使用pull:相当于先执行fectch,在执行merge。

fetch / merge / pull | 克隆到本地仓库的分支名默认为origin
  • **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  
    例子:
    git log 查看提交日志
    
我们来查看两次提交的不同,hash的前几位字符即可代表该hash code
  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
    用于把某次提交的内容合并到当前分支

你可能感兴趣的:(Git初阶:入门及常用命令)