参考

  1. 廖雪峰 https://www.liaoxuefeng.com/wiki/896043488029600/897889638509536
  2. https://mp.weixin.qq.com/s/caVfg8qCRjSiogD-jitIeA
  3. https://mp.weixin.qq.com/s/XcmrClMqqTWoDIDitXEcmQ
  4. https://learnku.com/articles/22068

简易的命令行入门教程

Git 全局设置:

1
2
git config --global user.name "张三"
git config --global user.email "1234@qq.com"

创建 git 仓库:

1
2
3
4
5
6
7
8
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/zhangsan/test.git
git push -u origin "master"

已有仓库?

1
2
3
cd existing_git_repo
git remote add origin https://gitee.com/zhangsan/test.git
git push -u origin "master"

入门

一、安装 Git

首先,确保你的计算机上安装了 Git。你可以访问 Git 官网 下载对应操作系统的安装包。

二、基本配置

安装完成后,打开终端或命令行,配置你的用户信息,这将用于你提交时的作者身份:

1
2
git config --global user.name "你的名字"
git config --global user.email "you@example.com"

三、创建与初始化仓库

  1. 本地新建仓库:在项目目录下,运行以下命令初始化一个新的 Git 仓库:

    1
    git init
  2. 克隆现有仓库:若要从远程仓库克隆到本地,使用:

    1
    git clone https://github.com/用户名/仓库名.git

四、工作流程基础

Git 的工作流程主要包括以下几个步骤:

  1. 工作目录:你编辑文件的地方。
  2. 暂存区(Index):通过 git add 命令,将修改过的文件放入暂存区,准备提交。
  3. 提交:使用 git commit 将暂存区的快照永久保存到版本库中。
  • 添加文件到暂存区:

    1
    git add 文件名

    或添加所有修改过的文件:

    1
    git add .
  • 从暂存区删除文件

    1
    git rm --cached filename
  • 提交到仓库:

    1
    git commit -m "提交信息"

五、分支管理

Git 强大的分支管理能力是其核心特性之一。

  • 创建并切换到新分支:

    1
    git checkout -b 分支名
  • 列出所有分支:

    1
    git branch
  • 合并分支:

    先切换回主分支,然后:

    1
    git merge 分支名
  • 删除分支:

    1
    git branch -d 分支名

六、版本回退

  • 查看提交历史:

    1
    git log
  • 回退到某一版本:

    通过 commit id 回退:

    1
    git reset --hard commit_id

七、解决冲突

当合并分支时遇到冲突,Git 会标记冲突文件,需要手动编辑解决冲突,然后再次提交。

八、远程仓库操作

  • 添加远程仓库:

    1
    git remote add origin 远程仓库地址
  • 推送本地分支到远程仓库:

    1
    git push -u origin 分支名
  • 拉取远程仓库更新:

    1
    git pull origin 分支名

九、高级技巧

  • stash:临时保存工作现场,用于切换分支前快速清理工作目录:

    1
    git stash
  • 重置:撤销提交,--soft 仅移动HEAD,--mixed 移动HEAD并恢复暂存区(默认),--hard 移动HEAD并丢弃工作目录的改动:

    1
    git reset --hard HEAD^
  • cherry-pick:选择性地应用另一个分支的某次提交到当前分支:

    1
    git cherry-pick commit_id

命令

1
2
3
4
5
6
7
8
9
10
git init
git add filename
git rm --cached filename
git commit -m "add filename"
4. git status
5. git log
6. git reset --hard HEAD^
git reset --hard commit_id
7. git reflog
8. git reset --hard commit_id
  1. git commit只负责把暂存区的修改提交
  2. git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
  3. git checkout -- file可以丢弃工作区的修改,让这个文件回到最近一次git commitgit add时的状态
  4. git reset HEAD <file>git reset HEAD -- 目录 可以把暂存区的修改撤销掉(unstage),工作区不变
  5. 提交后删除,发现删错了,可以 git checkout -- file 恢复最新版本
  6. 已经提交了不合适的修改到版本库时,想要撤销本次提交,可以 git reset --hard HEAD^
  7. 先手动删除文件,然后使用git rm filegit add file效果是一样的

分支

  1. 查看分支:git branch

  2. 创建分支:git branch <name>

  3. 修改分支名称: git branch -m oldname newname

  4. 切换分支:git checkout <name>

  5. 创建+切换分支:git checkout -b <name>

  6. 合并某分支到当前分支:git merge <name>

  7. 删除分支:git branch -d <name>

  8. 解决冲突:编辑冲突文件,再提交

  9. 禁用Fast forward模式合并,即普通模式合并,合并是一次 commit,有历史记录

    1
    git merge --no-ff -m "merge with no-ff" dev
  10. 实际开发分支策略

UTOOLS1576642682106.png

Bug 分支 stash

  1. 保存工作现场 「当前在 dev 分支」

    1
    git stash 
  2. 切换到 master 分支

    1
    git checkout master
  3. 创建并切换至修复 bug 分支

    1
    git checkout -b issue-101
  4. 修复完成后,切换到 master 分支,并完成合并,最后删除issue-101分支

    1
    2
    3
    git checkout master
    git merge --no-ff -m "merged bug fix 101" issue-101
    git branch -d issue-101
  5. 切换回 dev 分支,继续干活

    1
    git checkout dev
  6. 查看工作现场

    1
    git stash list
  7. 恢复现场并删除 stash

    1
    2
    3
    4
    5
    方式一:
    git stash apply
    git stash drop
    方式二:
    git stash pop
  8. 多次 stash,恢复的时候,先用git stash list查看,然后恢复指定的stash

    1
    git stash apply stash@{0}

Feature 分支

  1. 开发一个新 feature,最好新建一个分支

  2. 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除

抓取分支

  1. 从远程库 clone 时,会把仓库所有分支代码都会下载到本地,但默认只显示 master 分支

    可以通过 -b dev 默认显示 dev 分支

    1
    2
    3
    git clone https://github.com/wangwenzhe/test.git

    git clone -b dev https://github.com/wangwenzhe/test.git
  2. 本地显示并切换至 dev 分支

    1
    git checkout -b dev origin/dev

推送分支

  1. 查看远程库的信息

    1
    2
    git remote
    git remote -v
  2. 添加远程库

    1
    git remote add origin https://github.com/wangwenzhe/test.git
  3. 删除本地的远程库配置

    1
    git remote rm origin
  4. 推送分支

    1
    2
    3
    //把指定分支推送到远程库对应的分支上
    git push origin master
    git push origin dev
  5. 强制推送

    1
    git push -u origin master -f

多人协作的工作模式

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
  3. 如果合并有冲突,则解决冲突,并在本地提交
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功
  5. 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

贡献代码的步骤

  1. 在 Gitee 或者 Github 上 fork 项目到自己的 repo
  2. 把 fork 过去的项目也就是你的项目 clone 到你的本地
  3. 修改代码(记得一定要修改 v5-dev 分支)
  4. commit 后 push 到自己的库(v5-dev 分支)
  5. 登录 Gitee 或 Github 在你首页可以看到一个 pull request 按钮,点击它,填写一些说明信息,然后提交即可。
  6. 等待作者合并

忽略提交控制

.gitignore 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
HELP.md
target/
.mvn
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/

### VS Code ###
.vscode/

问题

无法删除远程分支

情况一:当前分支为默认分支

解决:仓库配置,默认分支改为 master

情况二:分支受保护,无法删除

解决:仓库配置,Protected Branches 删除保护记录