工作目录(workspace):开发目录
暂存区/索引(stage):git add之后会将文件存放到暂存区
本地仓库(local ):commit会将暂存区的文件提交至本地仓库,在本地仓库可以全部离线操作,因为git有一个几乎和远程一样的离线仓库
远程仓库(remote):中心化仓库,可以和别人共享。本地仓库的内容可以push到远端仓库
在git中,HEAD,分支,tag可以理解为一个指针,指向对应commit的SHA1值(commit ID)
该命令将创建一个.git的子目录,这个子目录含有初始化的git仓库中所有的必须文件。
将一个已经存在的远程仓库拉到本地,并创建一个.git的文件夹。从远程仓库拉取下来的所有数据放入.git文件夹,然后从中读取最新版本的文件的拷贝。
如果想在克隆远程仓库的时候自定义本地仓库的名字,可以使用这条命令指定本地仓库名。
git clone 会将远程仓库自动命名为origin,拉取它的数据,创建一个指向它的master分支的指针,并且在本地将远程分支命名为origin/master(其他分支也是一样的),如果想指定远程分支的名字,可以使用 ,那么默认的远程分支的名字就是aaa/master
当克隆或者pull时,它会自动创建一个跟踪origin/xxx的xxx分支,如果愿意的话也可以设置其他的跟踪分支,或是一个在其他远程仓库上的跟踪分支,通过运行 (本地分支和远程分支名字可以不同),此外,可以通过–track来跟踪: 用于将当前分支跟踪到远程serverfix分支
设置已有的本地分支来跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支,可以使用 -u 或 --set-upstream-to 选项:
使用文件或目录的路径作为参数,如果参数是目录的路径如 ,该命令将递归地跟踪并添加该目录下的所有文件到暂存区。
这是个多功能命令:可以用它开始跟踪新文件(新增文件),把已经跟踪的文件放到暂存区(修改文件),还能用于合并时把有冲突的文件标记为已解决状态等
:添加更改和删除的文件,新增的不会add上去
用于对比还没有暂存起来的变化内容
或 若要查看已暂存的将要添加到下次提交里的内容,可以使用该命令
对比两个commit之间修改了哪些代码文件:
会启动文本编辑器输入提交说明,目前我的ubuntu20上默认是nano,可以通过命令来设置编译器。通过编辑器可以输入多行提交说明
提交一行说明
相当于先add再commit,也就是先跳过暂存区,把已经跟踪过的文件暂存起来一把提交,从而跳过git add 步骤
有时候提交完了才发现漏掉了几个文件没有添加,或者信息写错了,此时可以运行带有–amend选项的命令来重新提交:,最终只会有一个提交(第二次提交将替换旧的提交); 这个命令待验证
使用rebase命令进行变基,如: (合并前三次),或者使用git log查看前面第四次的commit,使用 ,这样就会出现最近三次的commit,必须要保留一次commit(即pick至少要有一个)
1. pick是保留,s(squash)是被合并不保留的,将要合并的几次commit的pick改成s
2. 删除不保留的log信息(不带#的就是log信息)Ctrl+o保存后enter退出
3. 再提交就ok了,可通过git log查看
如果linux中的mv, 可以用于重命名文件,相当于运行了以下三条命令:
-p或-patch:会显示每次提交所引入的差异,如 显示最近两次的提交(没有这个功能?)
如果想看到每次提交的简略统计信息,可以使用 , 会列出所有被修改过的文件
查看当前分支的提条线
根据author过滤:
:先把自己修改的存储起来 可以看到git stash保存的信息
:index不写默认是第0条,弹出第index条stash的内容,并从列表中删除这一条stash记录,
:应用某个stash,但不会从列表中删除这条stash记录; 清空stash栈
:将第index条记录删除掉。
git stash新增的文件:先git add,再git stash
只执行git stash也可以,系统会自动添加信息
:显示改动信息,默认展示第一个存储信息,后面加stash@{index},index为索引,从0开始,比如第2个
:显示第一个存储的改动,如果想显示其他存储,
创建一个分支后,它有一个名为HEAD的特殊指针,指向当前所在的本地分支。 切换到branch1分支做两件事:1. HEAD指针就指向Branch1分支;2. 将工作目录恢复成Branch1分支指向的快照内容。删除本地分支: 强制删除:。
遇到冲突时分支的合并,为了解决冲突,必须选择使用由====分隔的两部分中的一个,然后对每个文件使用 命令来将其标记为冲突已经解决,再用git commit完成提交。 不加任何参数运行它,会得到当前所有分支的一个列表; 可以查看每一个分支的最后一次提交。 与 这两个选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支,不加参数会列出已合并或未合并到当前分支的分支,提供一个参数来查看其他分支的合并状态而不必检出它们(这个命令没用过),如
查看本地已有的分支和这些分支跟踪哪些远程分支,本地分支是否领先,落后时可以使用
查看所有分支:
删除远程分支: 基本上这个命令只是从服务器上移除这个指针
切换分支
分支改名:,修改之后可以通过 在远程创建一个同名分支并关联到这个远端分支
设置当前分支跟踪的远程分支:
查看某个分支是从哪个远端分支拉的:
分支描述信息:
给分支添加信息:
查看分支上添加的信息:
--soft HEAD^,仅撤回commit, 你进行了2次commit,想都撤回,可以使用HEAD~2
- mixed:默认操作,撤销上一次的git add和commit(如果没有commit只撤销add),不删除工作空间的改动代码
- soft:撤销commit但不撤销add,不删除工作空间改动代码
- hard:撤销add和commit,并删除工作空间改动代码。注意完成这个操作后,就恢复到了上一次的commit状态。
- git reset --hard commit-id 可以用该命令回滚到某个已提交的commit,再使用git push同步到远端分支。
撤销对文件的修改
- git reset --hard commit-id 可以用该命令回滚到某个已提交的commit,再使用git push同步到远端分支。
回退到某个版本:,然后git push
:删除目录下没有被跟踪的文件,没有被管理过的文件:
- : 清除包括目录在内的未跟踪的文件。
- 或 : 安全开关,表示强制执行清理当前目录下的文件
- 或 :是一次clean的演习,会列出哪些文件会被删除,但并不会真正执行清除操作,只显示文件,不会显示目录
- :这个选项会让命令清除包括被忽略的未跟踪文件。
- :这个选项只清除被忽略的未跟踪文件。
- :删除指定路径下没有被track的文件
使用示例:
- :强制清除当前目录下未跟踪的文件。
- :强制清除当前目录下未跟踪的文件和目录,但不会删除目录下的其他git仓库目录
- :强制清除包括当前目录下的所有目录,包括其他git仓库
git查看某个文件的修改历史: 文件名
显示修改历史
查看两个版本之间修改了哪些文件:
查看自己的提交的log:
查看暂存前后的变化
查看已暂存起来的变化
查看是谁做的历史修改:
查看add内容:
将A分支的某次提交同步到B分支:
- 切换到B分支
///如果出现冲突
1. 手动解决冲突
2. 冲突的文件
3.
/// 如果有冲突则继续解决,直到提示成功,解决完冲突- git push origin B远程分支
报错:
fatal:bad object xxx:这个commit id的分支是否存在;且本地要拉下来更新,即A分支要cherry pick到B分支的内容要在本地存在
查看已经配置的远程仓库服务器可以用 命令。
-v选项会显示要读写的远程仓库使用的git保存的简写与其对应的URL
给本地仓库关联到远程仓库同时指定一个简写使用
查看某一远程仓库的更多信息:,会列出远程仓库的URL与跟踪分支的信息,它会告诉你正处于master分支(——和实际验证有出入);列出了本地分支会pull/merge到哪些远程分支等信息。
修改一个远程仓库的简写名
解除远程仓库:,使用这个命令后,所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除
整合分支最简单的方法是用 命令。它会把两个分支的最新快照已经二者最近的共同祖先进行三方合并,合并的结果生成一个新的快照,如下图所示,将branch1分支合并到master分支:
合并前:
合并后:
变基:提取C4中引入的补丁和修改,然后在C3的基础上应用。使用rebase命令将提交到某一个分支上的修改都移至另一分支,具体操作:
变基后(两个分支一致,少了快照):
变基出现冲突后,需要手动解决冲突,然后
push可能会出现如下问题:
这是因为rebase的时候,没有将远程的代码和提交信息pull到本地分支——?
使用命令 提交
任何时候,可以通过 来终止rebase执行,并且当前分支会回到rebase开始之前的状态
- : branch1 和 branch2 是你想要比较的两个分支的名称。这个命令将显示在 branch1 和 branch2 之间的差异。
- 两个分支之间所有不同文件的详细差异
- 只显示哪些文件被修改了,而没有具体内容的差异
git tag是对commit的标记,以便后续能更好的引用这个commit。
- 查看当前仓库有哪些tag:
- 创建:当前commit的tag:,如果要指定commit,通过;如果要添加一些描述性信息,使用以下命令:;创建完后使用git status是看不出有任何变化的
- 查看:tag的信息,包括tag的创建者,创建日期和附带的消息:
- 推送:
- 推送某一个tag到远端分支:
- 推送所有tag:
- 从远端仓库获取指定的tag,可以使用这个tag进行检出,创建新的分支等操作
- 检出这个分支
- 使用这个tag创建新的分支:
todo
- 配置文件
- git首先会查找系统级别的配置文件 /etc/gitconfig,这个文件也可能是在/user/local/etc/gitconfig,也有可能不存在,比如我的Ubuntu就找不到该文件,可以通过命令 查看该文件路径。传递 选项给git config,就会读写该文件。
- 接下来git会查找每个用户的 (或者 ~/.config/git/config)文件。可以通过选项 让git读写该文件。
- 最后git会查找正在操作的仓库所对应的git目录下的配置文件(.git/config)。这个文件只对该仓库有效,对应的操作选项是 。
以上三个选项优先级从低到高,所以 .git/config中的值会覆盖掉 /etc/gitconfig 中所对应的值,配置全局user和email命令示例(仓库目录下的local配置将config替换成local即可):
- 保存密码:
- git替换url:
- 配置文件的内容及格式:
TODO - 修改文本编辑器: 将vim设置为默认编辑器
- 新增的模板文件,在文件中按自己想要的提交信息添加
- 设置commit.template: 。
此时就会在运行 git commit 后的编辑器上显示模板内容
- 忽略文件:创建编辑.gitignore(windows下无法建立.开头的文件,需要在gitbash中使用vim创建),在后面加上需要忽略的文件,如log/*(*代表忽略该目录下的所有文件)
- 文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); 问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号()表示匹配任意中间目录,比如 a//z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。
- core.excludesfile。一般情况下可以在.gitignore文件里规定不跟踪的文件,但是,要在所有的版本库中忽略掉某一类文件,可以配置一个类似于全局生效的.gitignore文件。需要按如下方式创建:
- 新增文件 ~/.gitignore_global文件
- 文件内容格式同.gitignore
- 运行 git confifg --global core.excludesfile ~/.gitignore_global
- 忽略已存在缓冲区的文件:,如
- 已经存在缓冲区,但希望以后从缓冲区移除,也不用追踪该文件,该文件变化或者不变化都不影响git status的结果:git rm --cached testFile //将该文件从缓冲区移除永远不追踪该文件
- windows下安装配置及问题汇总:
○ windows下配置github公钥:https://zhuanlan.zhihu.com/p/
○ gitbash中git status显示的是数字: 就显示汉字了(在options->Text的locale里选择默认)
TODO
删除文件夹
- 当设置好跟踪分支后,可以通过简写 @{upstream}或 @{u} 来引用它的上游(远程)分支,如在master分支时并且它正在跟踪origin/master时,可以使用
- error: src refspec br_develop_prod_platform_ota does not match any:本地分支名和远程分支名不同导致,修改本地分支名即可
- error: Cannot delete branch ‘xxx’ checked out at ‘/*/xx’:删除分之时不能停留在要删除的分支上
- git status后发现文件有改动,git checkout .之后仍然存在:
这里是因为文件模式发生了变化,有可能是Linux/Win/Mac平台差异导致的,可以通过命令 或(全局)修改,也可以直接修改代码仓库 .git 目录里的 config 文件的 filemode (在 [core] 段中)字段,将其改为 false。 - git clone时报错:
解决方式:再git clone
- svn co xxx:从svn上下载
- svn up:更新
- svn up -r version:更新到version版本
- svn revert [-R] xxx_file_dir 取消所作的修改
- svn log -l n:查看前n个日志
- svn diff path: 默认将path与基础版本比较。
- 首先,需要安装Python。VCS是用Python编写的,因此需要Python环境。下载Python的最新版本(确保是Python 3.x,不是2.x),并在安装过程中,勾选“Add Python 3.x to PATH”选项。安装完成后,你可以通过在命令行输入python --version来验证安装是否成功。
- 安装pip。大部分新版的Python已经自带pip,如果没有的话,可以通过下载get-pip.py文件,然后在命令行中运行python get-pip.py来安装。
- 安装Git。VCS依赖于git来管理版本控制,因此需要安装git。到Git官网下载最新的版本,并按默认选项安装。
- 通过pip安装vcs。在命令行中输入以下命令:。
- 验证安装。在命令行输入,如果能正确显示出版本信息,则表明vcs安装成功。
- 拉代码: 或者 在指定dir下拉代码
- 更新仓库:
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/22354.html