git
- 一、git 配置
- 二、git 建立版本库
- 三、git 基础操作
- 四、git 远程仓库操作
- 五、git 打标签
- 六、git 分支管理
- 1、[git branch <branch_name>] 创建分支
- 2、[git checkout <branch_name>] 切换分支
- 3、[git checkout -b <branch_name>] 创建分支并切换到新分支
- 4、[git merge <branch_name>] 将其它分支合并到当前分支
- 5、[git branch -d <branch_name>] 删除指定分支
- 6、[git branch <option>] 显示分支
- 7、[git ls-remote <remote_name>] 查看远程仓库的分支
- 8、[git push <remote_name> <branch_name>] 将本地创建的分支推送到远程
- 9、[git push <remote_name> --delete <branch_name>] 删除远程仓库的分支
- 10、[git switch <branch_name>] 切换分支(更简洁直观)
- 七、git 子模块(submodule)
一、git 配置
- 当安装了git后的第一步就是配置git信息,需要配置用户姓名和用户邮箱。只需要配置这两条就可以使用了。
git config --global user.name "Your Name"
git config --global user.email "Your Email"
git config --list
:查看配置信息,还有许多其它选项可以使用git help config
这条命令查看帮助文档。
二、git 建立版本库
1、将尚未进行版本控制的本地目录转换为 Git 仓库
- 在需要进行版本控制的目录下执行git初始化命令,这样会创建一个.git的目录。如果目录下有其他文件内容,应该开始追踪这些文件。具体操作如下:
git init # 初始化目录镜像版本控制
git add filename # 添加需要追踪的文件
2、从其它服务器 克隆 一个已存在的 Git 仓库
- 通过拉取开源仓库从而获得一个git仓库
git clone url # 这将从指定的url中拉取一个仓库
三、git 基础操作
1、[git status] 查看仓库当前状态
git status
:这会显示当前git仓库的状态,哪些文件被修改了,哪些文件被暂存了,哪些文件还没有暂存等等这些信息。
2、[git diff] 比较文件差异
git diff
:查看工作区与暂存区的差异git diff <filename>
:查看具体文件工作区与暂存区的差异git diff --cached
:查看暂存区与上一次提交的差异git diff --cached <filename>
:查看某个文件暂存区与上一次提交的差异git diff <filename1> <filename2>
:查看两个文件之间的差异git diff <commit_id1> <commit_id2>
:查看两个版本直接的差异
3、[git add] 将文件添加到暂存区(追踪文件)
git add <filename>
:将文件添加到暂存区
4、[git commit -m] 提交更新
git commit -m "说明信息"
:将暂存区文件提交
5、[git rm] 移除文件
git rm <filename>
:将文件从工作区和暂存区删除git rm -f <filename>
:强制从工作区和暂存区删除文件git rm --cached <filename>
:将暂存区文件删除,但保留工作目录中的文件
6、[git log] 查看日志
git log <option>
:查看历史提交信息,[option]可以加也可以不加,下面提供一些option
-p:显示提交的补丁(具体更改内容)。
--oneline:以简洁的一行格式显示提交信息。
--graph:以图形化方式显示分支和合并历史。
--decorate:显示分支和标签指向的提交。
--author=<作者>:只显示特定作者的提交。
--since=<时间>:只显示指定时间之后的提交。
--until=<时间>:只显示指定时间之前的提交。
--grep=<模式>:只显示包含指定模式的提交消息。
--no-merges:不显示合并提交。
--stat:显示简略统计信息,包括修改的文件和行数。
--abbrev-commit:使用短提交哈希值。
--pretty=<格式>:使用自定义的提交信息显示格式。
7、[git commit --amend -m] 覆盖最近一次提交信息
git commit --amend -m "说明信息"
:如果上次提交漏了几个文件,或者对于上一次提交时的说明信息不太满意,可以使用这条命令覆盖上次提交。如果有遗漏的文件,那么先使用git add
添加遗漏的文件后再使用这条命令。如果灭有遗漏的文件直接使用这条命令修改说明信息。
8、[git checkout – filename] 丢弃工作区修改
git checkout -- <filename>
:git checkout – filename意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
9、[git reset HEAD filename] 撤销使用git add后暂存的文件。
git reset HEAD <filename>
:若果使用git add
添加文件到暂存区,但是又不想提交了,可以使用这条命令撤销暂存。
10、[git reset] 版本回退
git reset <--hard | --soft> HEAD
:回退到某个版本,不同参数效果不一样,参数说明如下:
--hard: 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交(完全回退到某个版本)
--soft:参数用于回退到某个版本(会保留当前问题件的修改内容)
HEAD 说明:
HEAD:表示当前版本
HEAD^ :上一个版本
HEAD^^ :上上一个版本
HEAD^^^ :上上上一个版本
以此类推...
可以使用 ~数字表示
HEAD~0 :表示当前版本
HEAD~1 :上一个版本
HEAD^2 :上上一个版本
HEAD^3 :上上上一个版本
以此类推...
四、git 远程仓库操作
- 注意:远程操作需要配置ssh,查找其它资源进行ssh配置
1、[git remote] 管理远程仓库
git remote
:列出远程仓库git remote -v
:列出远程仓库并显示urlgit remote add <remote_name> <remote_url>
:如果本地有一个仓库,但是没有与远程仓库关联,使用这条命令可以将本地仓库与远程仓库关联起来。【git remote add origin git@github.com:zhansan/learngit.git
:origin就是仓库名称,后面的就是远程仓库的url,要使用自己的url不要用别人的。然后使用git push -u origin master
将本地内容推送到远程仓库即可】git remote rename <old_name> <new_name>
:将已经配置的远程仓库重命名。【git remote rename origin new_hhh
:将名为:origin的仓库名重命名为:new_hhh】git remote remove <remote_name>
:存当前仓库删除指定的远程仓库,与远程仓库断开关联。git remote show <remote_name>
:显示远程仓库的详细信息 【git remote show origin
:显示名为origin仓库的详细信息】
2、[git fetch] 获取远程仓库代码
git fetch
:获取远程仓库代码,但这并不会主动合并到本地仓库代码,在这之后执行下面的命令才会合并到本地。git merge
:将使用git fetch更新的代码合并到本地。
3、[git pull] 获取远程仓库代码并直接合并到本地
git pull
:这条命令相当于执行git fetch 后紧接着执行 git merge,有时候需要将远程代码拉去下来与本地对比之后再决定是否合并就可以使用git fetch和git merge,但有时候无需对比直接拉去合并就直接使用git pull即可
4、[git push] 将本地仓库推送到远程仓库
git push <remote_name> <branch_name>
:将本地分支推送到远程仓库【git push origin master
:将本地master分支推送到远程仓库origin】
5、[git push <remote_name> --delete <branch_name>] 删除远程仓库的分支
git push origin --delete master
:将远程仓库origin的master分支删除。
五、git 打标签
- 注意:git标签相当于给一个特定的commit起了一个别名,它和特定的commit是关联的。
1、[git tag] 列出已有的标签
git tag
:这将会列出已有的标签,也可以选择加上**–list | -l**这样的option,效果是一样的。
2、[git tag -a <tag_name> -m “说明信息”] 添加带有标签详细信息的标签
git tag -a <tag_name> -m "说明信息"
:这将添加一个带有详细信息的标签,【git tag -a v1.4 -m "my version 1.4"
:这会添加一个标签名为:v1.4说明信息是my version 1.4,当然了使用**-a**不止有自己添加的说明信息,还包含打标签者的名字、电子邮件地址、日期时间等等信息。使用git show v1.4
查看此标签详细信息时会列出这些信息】
3、[git tag <tag_name>] 轻量标签 不带有详细信息
git tag <tag_name>
:添加一个不带有任何信息的标签。当使用git show <tag_name>
查看标签详细信息时只会看到和这个标签对应的commit的信息,并没有关于标签的信息
4、[git tag -a <tag_name> <commit_id>] 给已经提交的历史版本打标签
git tag -a <tag_name> <commit_id>
:给已经提交的历史commit打标签 【git tag -a v1.2 9fceb02
:给历史commit为:9fceb02
的打标签名为:v1.2,commit一般选取前几位可以喝其它commit区分开即可,当然也可以全部选取】
5、[git push origin <tag_name>] 显示推送标签至远程仓库
git push origin <tag_name>
: 在本地打了标签以后如果执行git push并不会将标签推送到远程,所以需要显示的推送标签至远程仓库。如果在本地打了很多标签,这条命令只会将指定的某一个标签推送到远程,并不会全部推送到远程git push origin --tags
:这条命令会将本地所有的标签推送到远程
6、[git push origin --delete <tag_name>] 删除远程标签
git push origin --delete <tag_name>
:将会删除远程标签 【git push origin --delete v1.0.1
:删除已经推送到远程的v1.0.1这个标签】
7、[git tag -d <tag_name>] 删除本地标签
git tag -d <tag_name>
:如果在本地打了标签,但又不想要这个标签了可以通过这条命令删除
六、git 分支管理
1、[git branch <branch_name>] 创建分支
git branch <branch_name>
:创建一个分支,但不会切换到新创建的分支。
2、[git checkout <branch_name>] 切换分支
git checkout <branch_name>
:切换到指定分支
3、[git checkout -b <branch_name>] 创建分支并切换到新分支
git checkout -b <branch_name>
:在创建新分支的同时切换到分支,相当于上面两条命令的简写
4、[git merge <branch_name>] 将其它分支合并到当前分支
git merge <branch_name>
:将指定分支合并到当前所在的分支,如果合并有冲突需要手动解决的
5、[git branch -d <branch_name>] 删除指定分支
gir branch -d <branch_name>
:删除不需要的分支
6、[git branch ] 显示分支
git branch <option>
:更具不同选项来显示分支- option说明:
-a | --all:查看远程分支和本地分支
-r | --remote:查看远程分支
--merged:已经合并到当前分支的分支
--no-merged:未合并到当前分支的分支
7、[git ls-remote <remote_name>] 查看远程仓库的分支
git ls-remote <remote_name>
:显示所有远程仓库的分支,当然也可以使用**git remote show <remote_name>**查看远程仓库更详细的信息
8、[git push <remote_name> <branch_name>] 将本地创建的分支推送到远程
git push <remote_name> <branch_name>
:将在本地创建的分支推送到远程仓库,这样远程仓库就会包含这个分支了。
9、[git push <remote_name> --delete <branch_name>] 删除远程仓库的分支
git push <remote_name> --delete <branch_name>
:这会将远程仓库中的分支删除
10、[git switch <branch_name>] 切换分支(更简洁直观)
git switch <branch_name>
:这是专用于切换分支的比起checkout更简洁直观git switch -c <branch_name>
:创建新分支并切换到新分支
七、git 子模块(submodule)
1、[git submodule add <remote_url> <submodule_path>] 添加子模块
git submodule add <remote_url> <submodule_path>
:将其它远程仓库添加为当前项目的子模块 【git submodule add https://github.com/chaconinc/DbConnector DbConnector
:将远程仓库DbConnector添加为当前项目的子模块。】git config -f .gitmodules submodule.DbConnector.branch <branch_name>
:指定要拉取的子模块分支 【git config -f .gitmodules submodule.DbConnector.branch stable
】- 添加了相关的子模块信息后在 .gitmodules 文件里会出现如下信息:
[submodule "DbConnector"]
path = DbConnector
url = https://github.com/chaconinc/DbConnector
branch = stable
- 如果想要将子模块同步到远程仓库,就应该将 .gitmodules 和 DbConnector(子模块目录)提交到远程。(和普通文件的提交流程一样)
2、[git clone --recurse-submodules <remote_url>] 克隆一个含有子模块的仓库
git clone --recurse-submodules <remote_url>
:–recurse-submodules 这个选项将会在拉取仓库时自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块。git submodule update --init --recursiv
:初始化、抓取并检出任何嵌套的子模块。如果在拉取是忘了**–recurse-submodules**选项,那么不用担心,执行这条命令即可。git submodule update --init --remote
:初始化,并更新子模块代码,如果在开发过程中别人在子模块提交了新的代码,而你正好需要这部分功能,那么使用这条命令更新子模块。如果当前目录下有很多子模块,其它子模块也有提交,但你不想更新所有的子模块,可以加上子模块的名称就可以更新指定的子模块:git submodule update --remote <submodule_name>
3、[ git submodule sync --recursive] 同步.gitsubmodules文件内容
git submodule sync --recursive
:如果手动修改了 .gitsubmodules 文件的内容,那么应该使用这条命令进行同步。然后再次初始化或者拉取子模块代码。
4、[git submodule] 列出包含的子模块
git submodule
:列出当前项目包含的子模块
5、[git submodule deinit <submodule_path>] 移除子模块
git submodule deinit <submodule_path>
:将子模块从 .git/config 文件中移除,并删除子模块目录中的文件。git rm <submodule_path>
:将子模块的引用从主仓库中删除,然后手动删除**.gitsubmodule**中要删除的子模块相关信息,然后将更改推送到远程。