先说几个基本概念:
工作区:就是你在电脑里能看到的目录;
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库;
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);
一、仓库管理
1、初始化仓库:
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的所有命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令;
git init # 使用当前目录作为 Git 仓库 git init newrepo # 指定目录作为Git仓库 #初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
2、克隆现有的git仓库到本地(最常用):
git clone <repo> # 克隆的当前目录 git clone <repo> <directory> # 克隆到指定目录 git clone -b 分支名称 git地址 # 指定分支克隆(非常常用)
3、仓库配置:
#1 查看当前配置 [root@ck102 iot-mqtt]# git config --list user.email=jiguiquan@haier.com # 用户邮箱(提交代码时的用户信息) user.name=jiguiquan # 用户名(提交代码时的用户信息) core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true remote.origin.url=http://gitlab.cosmoplat.com/iot-datacoll/iot-mqtt.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.yanji.remote=origin branch.yanji.merge=refs/heads/yanji #2 编辑 git config -e # 针对当前仓库 git config -e --global # 针对系统上所有仓库(全局) #3 设置提交代码时的用户信息 git config --global user.name "jiguiquan" git config --global user.email "jiguiquan@haier.com"
二、分支管理:
1、查看分支:
# 查看本地分支(加*号的为当前分支) [root@ck102 iot-mqtt]# git branch * yanji # 查看所有分支列表(加*号的为当前分支) [root@ck102 iot-mqtt]# git branch -a * yanji # 本地当前分支 remotes/origin/master # 远程分支 remotes/origin/yanji # 远程分支
2、创建删除分支:
#1 创建分支 [root@ck102 iot-mqtt]# git branch testing [root@ck102 iot-mqtt]# git branch testing * yanji #2 删除本地分支 [root@ck102 iot-mqtt]# git branch -d testing Deleted branch testing (was 8d98ce8). [root@ck102 iot-mqtt]# git branch * yanji
3、切换分支:
[root@ck102 iot-mqtt]# git branch testing * yanji # 切换分支到testing [root@ck102 iot-mqtt]# git checkout testing Switched to branch 'testing' [root@ck102 iot-mqtt]# git branch * testing yanji
三、代码/文件管理
1、查看本地文件变化 + :
[root@ck102 iot-mqtt]# git status # On branch testing # Changes not staged for commit: 修改的 # modified: pom.xml # # Untracked files: 新增的 # aaa.txt # bbb.txt
2、放弃(工作区)中的修改:
#1 如果是新增文件,那么直接就删除即可 [root@ck102 iot-mqtt]# rm -rf aaa.txt #2 如果是被修改文件 [root@ck102 iot-mqtt]# git chechout pom.xml # 放弃单个文件的修改 [root@ck102 iot-mqtt]# git checkout . # 放弃所有文件的修改 #3 检查现在的状态 [root@ck102 iot-mqtt]# git status # On branch testing # Untracked files: 新增的文件 # bbb.txt
3、添加文件修改到暂存区:
git add [file1] [file2] ... # 指定多个文件 git add [dir] # 指定文件夹 git add . # 添加当前目录下的所有文件到暂存区 git add -A . # 添加当前目录下的所有文件到暂存区(同上) git add *.java # 添加指定后缀的文件到暂存区(支持通配符) [root@ck102 iot-mqtt]# git status # On branch testing # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: bbb.txt # modified: pom.xml #
4、放弃(暂存区)中的修改(回到工作区):
# 单个文件/文件夹: [root@ck102 iot-mqtt]# git reset HEAD pom.xml # 所有文件/文件夹: [root@ck102 iot-mqtt]# git reset HEAD .
5、提交暂存区中的修改 + 查看提交:
[root@ck102 iot-mqtt]# git commit -m "这是用于撤回的commit" #1 查看刚刚commit,但是还没有push的提交 [root@ck102 iot-mqtt]# git cherry -v + 1cb3a9251abc0dd685a3c8f0231a9065a47e4964 这是用于撤回的commit #2 指定条数,查看提交(不指定-n就是所有) [root@ck102 iot-mqtt]# git log -n 2 yanji commit 1cb3a9251abc0dd685a3c8f0231a9065a47e4964 Author: jiguiquan <jiguiquan@haier.com> Date: Wed Sep 6 17:49:09 2023 +0800 这是用于撤回的commit commit 8d98ce84a05cc448df8761d40c9c197e95fe31e0 Author: liyan <liyan.cosmo@haier.com> Date: Wed Aug 23 17:10:29 2023 +0800 烟机代码更新
6、撤销commit后的修改:
# 撤销 commit, 但是保留修改在本地工作区中: # 注意,这里的commit_id是想到回到的那个节点,不是想要撤销的那条提交(前6位即可) git reset commit_id # 撤销 commit, 同时本地删除该 commit 修改: git reset --hard commit_id
7、推送提交到远程仓库:
git push
四、推送本地现有文件夹到远程仓库
首先在gitlab或者github,gitee等平台,创建一个仓库:
1、Git 全局设置:
git config --global user.name "吉桂权" git config --global user.email "jiguiquan@163.com"
2、进入本地目录执行:
cd existing_git_repogit git init git add -A . git commit -m "first commit" git remote add origin https://gitee.com/jiguiquan/gostudy.git git push -u origin "master"
五、同时管理多个remote,可向多个remote推送同一份代码
1、对remote的增删改查:
#1 查看remote列表 git remote #2 添加一个新的remote git remote add <name> <url> ## 例如:如果name = origin代表为默认的远程仓库 git remote add gitee https://gitee.com/zidancode/zd-test.git #3 修改remote的url git remote set-url <name> <NEW repo URL> ## 例如: git remote set-url gitee https://gitee.com/zidancode/new-zd-test.git #4 删除一个remote git remote remove <name> ## 例如: git remote remove gitee
2、指定 remote/分支 拉取代码:
git pull <remote_name> <branch_name>
3、指定 remote/分支 推送代码:
git push -u <remote_name> <branch_name> # -u参数表示upstream,指定了本地分支和远程分支的关联关系 ## 第一次推送时需要添加,之后就不需要了 ### 最全的指令是: git push -u origin master:master #### 即:将本地的master分支代码推送到远程origin的master分支上