0
点赞
收藏
分享

微信扫一扫

Git学习经验

凉夜lrs 2022-01-17 阅读 123
gitrepo

目录

1.基础使用

使用流程

2.撤销

撤销stage流程

撤销工作目录修改流程

撤销commit流程

3.分支

分支操作

需要将某一个分支中的一段提交同时应用到其他分支中时

4.repo

5.patch

生成

合入

错误处理

6.杂项


1.基础使用


工作目录(普通文件),暂存区(stage-index),git仓库(.git-HEAD),远程库(origin)

全局设置(--global对本地所有仓库生效):

git config --global user.name "Your Name"

git config --global user.email "you@example.com"

使用流程:

git clone “代码仓库地址”  下载代码,

用git fetch origin或者git pull来更新内容,

git pull = git fetch + git merge

修改文件用git add暂存修改,

用git status显示修改和暂存了哪些文件,

改好之后用git commit -m ‘’  提交记录到git仓库,

最后用git push origin master提交到服务器上,

可以把 master 换成任何分支。


2.撤销


撤销stage流程:

查看提交记录用git log , 参数  --pretty=oneline精简显示。

用 git reset 撤销所有暂存区域文件。

或用git reset file 来撤销特定的文件。

注意reset不会覆盖工作目录文件。

撤销工作目录修改流程:

使用 git checkout file用暂存区内容覆盖掉工作目录的文件内容。没有加入暂存区则用Git仓库最近一次提交版本。如果直接用最新的git仓库文件同时覆盖掉暂存区和工作目录内容可以使用git checout HEAD -- files 

撤销commit流程:

git reset --soft HEAD~n撤销最后n次 commit 并且保留工作目录改动的内容。

git reset --hard HEAD~n撤销最后n次 commit 并且覆盖工作目录改动的内容。

撤销commit之后想要恢复最新版本,用git reflog 可以获取到所有的版本号,再用git reset  --hard 版本号。


3.分支


每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。

创建仓库的时候,master 是“默认的”。在其他分支上进行开发,完成后再将它们合并到主分支master上。

HEAD指向的是当前分支,每个分支都指向其最后的提交。

分支操作:

使用git checkout  –b fenzhi 创建并切换分支,

用git branch 查看所有的分支,当前分支前会有星号,作出修改后对于其他分支的文件不会产生影响,

可以用git checkout fenzhi 切换到另一个分支,

然后用git merge -no-ff -m “注释” fenzhi 合并fenzhi到当前分支上,当两个分支上出现不同修改时产生冲突,

用git status查看未合并的文件,

使用git stash保存当前工作现场,

使用git pull更新git库,

打开文件查看差异并修改,

解决冲突之后git add标记为解决成功,

再重新git merge即可,

使用git stash pop恢复状态。

使用git checkout -d fenzhi 删除分支。

使用 git merge –no-ff  -m “注释” fenzhi 进行合并则会在当前分支中保存fenzhi的信息。

使用git rebase -i HEAD~n,或者git rebase -i 版本号1 版本号2,可以合并多个提交为一个提交,其中n为要合并的最后提交的几个分支,版本号则为前开后闭区间,只提供版本号1则合并其后的所有提交。

需要将某一个分支中的一段提交同时应用到其他分支中时:

如果只是复制某一两个提交到其他分支应使用git cherry-pick 版本号,

多个分支时使用 git  rebase  版本号1  版本号2  --onto fenzhi (注意区间为前开后闭)

合并后修改分支指向最后的提交:git checkout fenzhi,git reset --hard  版本号2


4.repo


repo通过一个git库manifests来管理项目的清单文件。

仓库目录(修改记录),工作目录(当前版本)。

一般来说,一个项目的Git仓库目录(默认为.git目录)是位于工作目录下面的,但是Git支持将一个项目的Git仓库目录和工作目录分开来存放。

manifests: 仓库目录有两份拷贝,一份位于工作目录(.repo/manifests)的.git目录下,另一份独立存放于.repo/manifests.git

repo:仓库目录位于工作目录(.repo/repo)的.git目录下

project:所有被管理git库的仓库目录都是分开存放的,位于.repo/projects目录下。同时,也会保留工作目录的.git,但里面所有的文件都是到.repo的链接。这样,即做到了分开存放,也兼容了在工作目录下的所有git命令。

既然.repo目录下保存了项目的所有信息,所有要拷贝一个项目时,只是需要拷贝这个目录就可以了。repo支持从本地已有的.repo中恢复原有的项目。

使用流程:

repo init初始化工程,指定待下载的分支

repo sync下载代码 -j 参数指明线程数

repo start将本地git库切换到开发分支(TOPIC BRANCH

repo forall -c “git 指令”如果针对每个git库的操作命令都是相同的,可以一次性完成所有操作,多条命令只需要用“;”间隔


5.patch


有时一个修改只想同步给协同开发的某几个人, 使用patch比push更加符合用户体验

为了保护master,一般情况下会建立一个专门处理新交来的patch的分支

推荐使用git的format-patch和am命令,用此方法获得的patch是commit里提交的code修改以及commit信息。

生成:

git format-patch –n commit_id

-n表示将这条commit及之前的多少条上传做成patch,如果只要这条commit_id,则n为1

合入:

git apply --stat mypatch.patch 查看patch的情况

git apply --check mypatch.patch 检查patch是否能够打上,没有任何输出则说明无冲突

git am mypatch.patch 全信息合入,无需额外commit,author也是patch的author而不是打patch的人

git apply mypatch.patch 无信息合入,打完patch后需要重新add和commit

错误处理:

用命令git apply --reject <patch_name>强行打这个patch,发生冲突的部分会保存为.rej文件,

根据.rej文件编辑发生冲突的文件以解决冲突,

将该patch涉及到的所有文件(不仅仅是发生冲突的文件)git add,

git am --resolved继续打patch。

如果不想打这一系列patch了,直接git am --abort。


6.杂项


如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,可以使用如下命令添加:git remote add origin <server>

要查看远程库的详细信息 使用 git remote –v

查看文件修改内容:git diff (filename)

查看已经add的文件修改内容:git diff --cached (filename)

要修改之前的commit内容,可以使用以下命令

git commit --amend

举报

相关推荐

0 条评论