GIT教程

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推到远程库123555分支,若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]

原文地址:https://www.cnblogs.com/chaikefusibushiji/p/6775749.html