一、git常用基本命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户 签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区,文件可以是 . 表示所有 |
git commit -m “日志信息” 文件名 | 提交到本地库,文件名可省略,表示所有 |
git commit -am “日志信息” | 跳过 git add, 将所有已被跟踪的文件更改提交到版本库 |
git commit --amend -m “日志信息” | 改写上一次commit的提交信息 |
git reflog | 查看历史记录 |
git log | 查看历史版本以及作者 |
git reset --hard 版本号 | 版本穿梭 |
二、git分支命令
命令名称 | 作用 |
---|---|
git checkout -b 分支名 | 创建分支 |
git checkout 分支名 | 切换分支,在本地化库后,连接远程库,clone、fetch、pull后切换master,会在本地生成一个master分支并关联到远程库的master分支 |
git checkout -b 本地分支名 origin/远程分支名 git checkout -b 本地分支名 --track origin/远程分支名 | 将远程仓库里指定的分支拉取到本地,并在本地创建一个分支与指定远程仓库分支关联起来,并切换到新建的本地分支中 |
git merge 分支名 | 把指定分支合并到当前分支 |
git branch | 查看本地分支 |
git branch -r | 查看远程分支 |
git branch -a | 查看本地分支和远程分支 |
git branch -v | 查看分支提交的详细信息,查看每一个分支的最后一次提交 |
git branch -d 分支名 | 删除分支 |
git branch -m new_branch_name | 重命名当前分支 |
三、git远程命令
命令名称 | 作用 |
---|---|
git remote add origin 远程地址g’i | 添加远程库,其中origin不是固定的,是远程库的别名,通常都是origin,辨识度高 |
git remote -v | 查看远程仓库 |
git remote rm 远程库名 | 移除不需要的远程仓库 |
git clone 远程库地址 | 克隆远程仓库所有内容 |
git clone -b <branch> <repository> | 克隆指定分支的存储库 |
git pull | fetch默认远程仓库当前分支(origin/分支名)的代码,然后merge到本地分支 |
git pull 远程库名 分支名 | 推送代码到远程库,在未关联时,git提示的使用方式 |
git push --delete origin old_branch_name | 删除远程分支 |
git fetch 远程库名 | 获取远程分支 |
git fetch 远程库名 远程分支 | 获取特定远程分支 |
git fetch origin release:dev | 基于 远程release分支 创建 本地dev分支 (但不会切换到该分支) |
a.远程已有remote_branch分支并且已经关联本地分支local_branch且本地已经切换到local_branch
git push
b.远程已有remote_branch分支但未关联本地分支local_branch且本地已经切换到local_branch
git push -u origin remote_branch
c.远程没有remote_branch分支并,本地已经切换到local_branch
git push origin local_branch:remote_branch
git fetch origin master:tmp
//在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
git diff tmp
//来比较本地代码与刚刚从远程下载下来的代码的区别
git merge tmp
//合并temp分支到本地的master分支
git branch -d temp
//如果不想保留temp分支 可以用这步删除
三、git删除历史版本、保留当前状态
1、创建并切换到lastest_branch分支
git checkout --orphan latest_branch
2、添加所有文件
git add -A
3、提交更改
git commit -am "删除历史版本记录,初始化仓库"
4、删除分支
git branch -D master
5、将当前分支重命名
git branch -m master
6、强制更新存储库
git push -f origin maste
四、远程分支重命名(默认本地分支与远程分支同名)
1、重命名本地分支
git branch -m new_branch_name
2、删除远程分支
git push --delete origin old_branch_name
3、推送到新命名的远程分支
git push origin new_branch_name
4、关联修改后的本地分支与远程分支
git branch --set-upstream-to origin/new_branch_name
五、冲突说明
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。git无法替我们决定使用哪一个。必须人为决定新代码内容
原本master分支txt内容
111111
222222
修改master分支txt内容
1111111 master
2222222
修改从原本master分支分出来的hot-fix分支的txt内容
111111
222222 hot-fix
当修改后的master分支和hot-fix分支合并时,会报错
会显示 (master|MERGING)
<<<<<<<< HEAD
1111111 master
2222222
========
111111
222222 hot-fix
>>>>>>>> hot-fix
将报错文件手动修改
1111111 master
222222 hot-fix
合并分支后只修改了当前分支
所以平时要养成先拉取再推送
六、不相关的本地库与远程库合并
当本地初始化本地库中有文件想将库中文件push到远程库的正确做法
- git remote add origin 远程仓库地址
- git pull origin master --allow-unrelated-histories (允许不相关历史提交,并强制合并)
- git branch --set-upstream-to=origin/master master
- git push
git 本地新建一个分支后,必须要做远程分支关联。如果没有关联, git 会在下面的操作中提示你显示的添加关联。关联目的是如果在本地分支下操作: git pull , git push ,不需要指定在命令行指定远程的分支. 推送到远程分支后, 你只要没有显示指定,git pull 的时候,就会提示指定特定分支。
解决:
使用git branch --set-upstream-to=origin/分支名称
;或使用git push -u origin master
指定远程仓库名和分支名推送至远程仓库,后续只需要使用git push
推送至远程仓库
七、git pull说明
git pull 本质就是: git fetch + git merge
本地通过 git clone 命令,将远程仓库拉取到本地仓库,本地仓库的 origin/master 的内容,是远程仓库 master 的一个副本;同时,本地仓库的 master 与 origin/master 内容相同。
执行git fetch
只会改变本地仓库的 origin/master 的内容,不会对本地仓库的 master 分支内容有影响。
执行 git merge origin/master
,就会更新本地仓库的 master 分支的内容。
八、远程分支
添加远程分支,其中origin不是固定的,是远程库的别名,通常都是origin,辨识度高
git remote add origin https://gitee.com/sea-z/hello-git.git
远程分支在本地是只读的,在本地只能查看远程分支
git branch -r #只产看远程分支
git branch -a #查看所有分支,包括本地和远程
远程分支存放位置
.git/refs/remotes/origin/
关于origin/master
本地仓库的 origin/master 的内容,是远程仓库 master 的一个副本
九、git clone
克隆远程仓库所有内容
git clone https://gitee.com/sea-z/hello-git.git
克隆指定分支的存储库
git clone -b <branch> <repository>
clone命令相当于下面指令合集,但不完全相同,最最最不同的就是clone不需要连接远程库,clone是不需要权限的,clone在没有初始化本地库时就可以使用,使用clone会在当前目录生成一个与远程库名相同的文件夹,文件夹里有.git
文件,而使用指令合集必须先初始化本地库
通俗易懂的说就是clone就是下载,把整个库下载在一个文件夹里,文件夹的名字是远程库名
git remote add origin https://gitee.com/sea-z/hello-git.git
git fetch
git checkout master
指令合集模拟clone文件.git
生成,旨在说明clone后的在本地的.git
是本地的,是生成,不是从远程库里“下载”的
# 初始化本地库
$ git init
Initialized empty Git repository in E:/Git/git-space/git-demo1/.git/
# 添加远程库
$ git remote add origin https://gitee.com/sea-z/hello-git.git
# 抓取
$ git fetch
remote: Enumerating objects: 29, done.
remote: Counting objects: 100% (29/29), done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 29 (delta 8), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (29/29), 5.43 KiB | 57.00 KiB/s, done.
From https://gitee.com/sea-z/hello-git
* [new branch] master -> origin/master
# 看一眼分支,此时还是没有本地分支的信息
$ git branch -a
remotes/origin/master
# 切换到master时,自动生成master,并跟踪远程master分支
$ git checkout master
Already on 'master'
branch 'master' set up to track 'origin/master'.
clone 命令默认会根据远程默认分支建立本地分支,确认远程默认分支为 master 后,clone 命令接着建立本地 master 分支,并和远程 master 分支做关联。
如果没有初始化本地库或者没有添加远程分支,clone没有权限的远程仓库,是没有远程分支的
git checkout master 完成了两项任务
- 建立本地分支master
- 本地master跟踪远程master
当要修改远程仓库的其他分支时,git checkout dev
同样完成了上述两项任务,这样就可以在本地分支dev下修改远程dev分支