15. 子模块
添加
git submodule add git@192.168.32.10:jovaccount/asl.git asl
初始化
git submodule init
更新
git submodule update
14. git stash
格式:git stash
功能:
将工作区和暂存区的修改,压入栈中,暂时保存起来,两区恢复到修改之前的状态,git status状态为clean
git stash后,即可放心的切换分支、合并远程分支、提交代码
操作完成后,可以使用git stash pop恢复现场,恢复中可能产生冲突,有则解决之
13. 撤销修改
修改位于工作区,则git checkout -- file,自动删除工作区的修改。
修改位于暂存区,则git reset HEAD file,暂存区放弃修改,修改进入工作区。
12. 工作区、暂存区、版本库
本地文件位于工作区,git add后进入暂存区,git commit后进入版本库。
11. 添加所有文件
格式:git add -A 或 git add .
功能:添加当前目录及子目录下所有修改过的文件
10. 查看差异
10.4 比较不同版本文件差异
git diff VersionNo1:file VersionNo2:file
file可以是文件,也可以是目录。
HEAD总代表当前版本; --stat进行概要显示,仅显示有差异的文件名。
惯例:-号代表左侧版本;+号代表右侧版本。
10.3 查看修改
比较工作区和暂存区:git diff file
此时,修改位于工作区
-号代表改之前的内容,即暂存区内容
+号代表改之后的内容,即工作区内容
比较工作区和版本库:git diff HEAD file
-号代表改之前的内容,即版本库内容
+号代表改之后的内容,即工作区内容
比较暂存区和版本库:git diff --staged file
git add . 将当前目录及其子目录下的修改提交到暂存区
-号代表改之前的内容,即版本库内容
+号代表改之后的内容,即暂存区内容
10.2 比较两普通文件的差异
git diff f1 f2
-号代表左侧文件,即f1
+号代表右侧文件,即f2
10.1 比较两分支的差异
格式:git diff b1..b2 file
功能:可以进行两远程分支间、两本地分支间、远程分支与本地分支间的比较
注意:file的路径需加以注意,为相对当前目录的相对路径。与--stat结果无关。路径错误,则无显示。
-号代表左侧分支,即b1
+号代表右侧分支,即b2
仅显示哪些文件修改过,加--stat,如图
1. 本地分支
1.1 查看
格式:git branch
功能:查看本地所有分支
1.2 创建
1.2.1
格式:git branch [Name]
功能:创建本地分支,名为Name
说明:
运行此命令生成分支的前提是,已存在master分支,否则报“fatal: Not a valid object name: master.”错误。
对于新创建的git目录,生成master的分支的方法是,或者通过git merge远程分支;或者git commit一些东西。
这两种方式将自动生成master分支。
1.2.2
格式:git branch [LocalBranName] [RemoteRepoName] / [RemoteBranName]
功能:创建本地分支LocalBranName,与远程分支[RemoteRepoName]/[RemoteBranName]建立关连
前提:已运行git fetch [RemoteRepoName]命令获取到该远程分支,即fetch后git branch -r中[RemoteRepoName]/[RemoteBranName]存在
注意:新分支是在当前分支的基础上创建的,指向当前分支的提交。故创建新分支前,有必要检验当前分支。
1.3 删除
格式:git branch -D [Name]
功能:删除本地Name分支
1.4 切换
格式:git checkout [Name]
功能:切换到Name分支
1.5 重命名
格式:git branch -m [Name] [NewName]
功能:把本地Name分支重命名为NewName
5. 提交
格式:git commit -m "xxx"
说明:git commit命令并不会将修改推送到服务器。推送操作需要显示地调用git push命令
8. 合并分支
格式:git merge [ObjectBranch]
说明:
若ObjectBranch位于当前版本之后,则无操作,Already up-to-date。
若Object位于HEAD之前,则无差错合并。
若Object与HEAD处于不同枝干,则出现冲突。
冲突内容:
冲突部分,由======分割为两部分。
之前,从<<<<<<HEAD到======为当前版本的内容;
之后,从=====到>>>>ObjectBranch为目标分支内容。
处理冲突:
直接编辑冲突文件即可。
9. 版本回退
格式:git reset --hard [VersionNo]
示例:
git reset --hard fd8c69df8378a4b8031e83002be288455d2e57bf
git reset --hard HEAD~1
说明:VersionNo,可以为git log输出中的commit id;可以为HEAD~n,表回退n个版本
2. 远程库
2.1 查看
格式:git remote -v
功能:查看远程库,获知库名和地址
2.2 添加
格式:git remote add [Name] [Url]
功能:添加远程库
说明:一个git项目可以添加多个远程库
例如:
git remote add RemoteRepoName git@git.coding.net:rongxiaojun/hhh.git
添加远程仓库RemoteRepoName,URL为git@git.coding.net:rongxiaojun/hhh.git。
2.3 获取更新
格式:git fetch [Name]
功能:获取远程仓库Name的更新,运行完成后,你就可以在本地访问该远程仓库的所有分支,将其中某个分支合并到本地
说明:
若使用gitlab或coding.net作远程库,拉取前,需将当前用户——起始目录——.ssh——id_rsa.pub中的公钥添加到项目中(cat id_rsa.pub)
若对应文件不存在,则运行ssh-keygen -t rsa -C "youremail@example.com"
2.4 合并
格式:git merge [RemoteRepoName] / [BranchName]
功能:将指定的远程分支合并到当前分支,fetch后必须merge,否则更新不可见
说明:
合并成功的前提是,工作区和暂存区的修改都已提交,git status处于clean状态
提交后,即可合并远程分支,有冲突就解决,所有冲突均已解决后,重新commit
2.5 推送
格式:git push [RemoteRepoName] [LocalBranchName] : [RemoteBranchName]
功能:将修改推送到远程库,将版本库内容推到远程库
说明:
若远程分支不存在,则创建;若本地分支名为空,则删除对应的远程分支
推送成功的前提是,获取到远程分支的最新内容,与本地分支合并,解决所有冲突,重新commit后,方可成功推到远程库对应分支
注意:冒号前后不能有空格
例如,git push 123 branch1:555
把本地分支branch1推到远程库123的555分支,若555不存在则创建
2.6 查看远程分支
格式:git branch -r
2.7 删除远程分支
格式:git push [RemoteRepoName] :[RemoteBranName]
说明:原理是把一个空分支push到远程库,相当于删除同名分支
6. 跟踪远程分支
格式:git branch --track [RemoteRepoName]/[BranchName]
说明:当前分支和远程分支建立关连。运行git pull,可直接从关连的远程分支获取更新;运行git push,可直接向关连的远程分支推送修改。
git pull:git fetch [RemoteRepoName] 和 git merge [RemoteRepoName]/[BranchName]
git push:git push [RemoteRepoName] [LocalBranchName] : [RemoteBranchName]