git学习笔记V1

Git学习笔记-2021.1.19
版本作者时间备注
V1.0.0陈哲2021.1.19Git入门学习笔记

Git download

下载地址,我选用的是淘宝的镜像,这个比较快。

Let’s start a project

Git global setup

git config --global user.name "username" 自己的用户名

git config --global user.email "your email"自己的邮箱

Create a new repository

git clone git@git.querycap.com:username/test.git

克隆gitlab上的项目到本地

cd test

touch README.md

git add README.md

添加到暂存区

git commit -m "add README"

把文件提交到仓库

git push -u origin master

Push an existing folder

cd existing_folder

git init

把这个目录变成git可以管理的仓库,会多了一个.git的目录,是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了

git remote add origin git@git.querycap.com:username/test4.git

git add .

git commit -m "Initial commit"

git push -u origin master

Push an existing Git repository

cd existing_repo

git remote rename origin old-origin

git remote add origin git@git.querycap.com:username/test4.git

git push -u origin --all

git push -u origin --tags

Git basical command

Branch

  • Build a new branch: $ git branch testing

    新建一个testing分支

  • Change another branch:$ git checkout testing

    切换到另一个testing分支

  • Merge branch:$ git merge

    分支的合并

  • Rebase branch:

    $ git checkout test

    $ git rebase master

    分支的衍合,就可以把在test分支里提交的改变移到master分支里重放一遍。

  • Delete branch:$ git branch -d testing

    删掉testing分支

  • View history log:$ git log

    查看历史操作过程

Git configuration

# 配置提交记录中的用户信息
$ git config --global user.name <用户名>
$ git config --global user.email <邮箱地址>
# 配置长期存储密码
$ git config --global credential.helper store
# 查看当前生效的配置信息
$ git config -l
# 编辑配置文件
# --local:仓库级,--global:全局级,--system:系统级
$ git config <--local | --global | --system> -e

Git clone

从远程仓库克隆一个版本库到本地。

# 默认在当前目录下创建和版本库名相同的文件夹并下载版本到该文件夹下
$ git clone <远程仓库的网址>

# 指定本地仓库的目录
$ git clone <远程仓库的网址> <本地目录>

# -b 指定要克隆的分支,默认是master分支
$ git clone <远程仓库的网址> -b <分支名称> <本地目录>

Git init

初始化项目所在目录,初始化后会在当前目录下出现一个名为 .git 的目录。

# 初始化本地仓库,在当前目录下生成 .git 文件夹
$ git init

Git remote

操作远程库。

# 列出已经存在的远程仓库
$ git remote

# 列出远程仓库的详细信息,在别名后面列出URL地址
$ git remote -v
$ git remote --verbose

# 添加远程仓库
$ git remote add <远程仓库的别名> <远程仓库的URL地址>

# 修改远程仓库的别名
$ git remote rename <原远程仓库的别名> <新的别名>

# 删除指定名称的远程仓库
$ git remote remove <远程仓库的别名>

# 修改远程仓库的 URL 地址
$ git remote set-url <远程仓库的别名> <新的远程仓库URL地址>

Git add

把要提交的文件的信息添加到暂存区中。当使用 git commit 时,将依据暂存区中的内容来进行文件的提交。

# 把指定的文件添加到暂存区中
$ git add <文件路径>

# 添加所有修改、已删除的文件到暂存区中
$ git add -u [<文件路径>]
$ git add --update [<文件路径>]

# 添加所有修改、已删除、新增的文件到暂存区中,省略 <文件路径> 即为当前目录
$ git add -A [<文件路径>]
$ git add --all [<文件路径>]

# 查看所有修改、已删除但没有提交的文件,进入一个子命令系统
$ git add -i [<文件路径>]
$ git add --interactive [<文件路径>]

Git commit

将暂存区中的文件提交到本地仓库中。

#把暂存区中的文件提交到本地仓库,调用文本编辑器输入该次提交的描述信息
$ git commit
#把暂存区中的文件提交到本地仓库中并添加描述信息
$ git commit -m "<提交的描述信息>"
#把所有修改、已删除的文件提交到本地仓库中
#不包括未被版本库跟踪的文件,等同于先调用了 "git add -u"
$ git commit -a -m "<提交的描述信息>"
#修改上次提交的描述信息
$ git commit --amend

Git fetch

从远程仓库获取最新的版本到本地的 tmp 分支上。

# 将远程仓库所有分支的最新版本全部取回到本地
$ git fetch <远程仓库的别名>

# 将远程仓库指定分支的最新版本取回到本地
$ git fetch <远程主机名> <分支名>

Git merge

合并分支。

# 把指定的分支合并到当前所在的分支下
$ git merge <分支名称>

Git diff

比较两个版本之间的差异。

# 比较当前文件和暂存区中文件的差异,显示没有暂存起来的更改
$ git diff

# 比较暂存区中的文件和上次提交时的差异
$ git diff --cached
$ git diff --staged

# 比较当前文件和上次提交时的差异
$ git diff HEAD

# 查看从指定的版本之后改动的内容
$ git diff <commit ID>

# 比较两个分支之间的差异
$ git diff <分支名称> <分支名称>

# 查看两个分支分开后各自的改动内容
$ git diff <分支名称>...<分支名称>

Git pull

从远程仓库获取最新版本并合并到本地。
首先会执行 git fetch,然后执行 git merge,把获取的分支的 HEAD 合并到当前分支。

# 从远程仓库获取最新版本。
$ git pull

Git push

把本地仓库的提交推送到远程仓库。

# 把本地仓库的分支推送到远程仓库的指定分支
$ git push <远程仓库的别名> <本地分支名>:<远程分支名>

# 删除指定的远程仓库的分支
$ git push <远程仓库的别名> :<远程分支名>
$ git push <远程仓库的别名> --delete <远程分支名>

Git reset

还原提交记录。

# 重置暂存区,但文件不受影响
# 相当于将用 "git add" 命令更新到暂存区的内容撤出暂存区,可以指定文件
# 没有指定 commit ID 则默认为当前 HEAD
$ git reset [<文件路径>]
$ git reset --mixed [<文件路径>]

# 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
$ git reset <commit ID>
$ git reset --mixed <commit ID>

# 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
# 相当于调用 "git reset --mixed" 命令后又做了一次 "git add"
$ git reset --soft <commit ID>

# 将 HEAD 的指向改变,撤销到指定的提交记录,文件也修改了
$ git reset --hard <commit ID>

Git revert

生成一个新的提交来撤销某次提交,此次提交之前的所有提交都会被保留。

# 生成一个新的提交来撤销某次提交
$ git revert <commit ID>

Git rm

删除文件或者文件夹。

# 移除跟踪指定的文件,并从本地仓库的文件夹中删除
$ git rm <文件路径>

# 移除跟踪指定的文件夹,并从本地仓库的文件夹中删除
$ git rm -r <文件夹路径>

# 移除跟踪指定的文件,在本地仓库的文件夹中保留该文件
$ git rm --cached

Git cherry-pick

把已经提交的记录合并到当前分支。

# 把已经提交的记录合并到当前分支
$ git cherry-pick <commit ID>

Git tag

操作标签的命令。

#打印所有的标签
$ git tag <标签名称> [<commit ID>]

#添加带有描述信息的附注标签,可以指定之前的提交记录
$ git tag -a <标签名称> -m <标签描述信息> [<commit ID>]

#切换到指定的标签
$ git checkout <标签名称>

#查看标签的信息
$ git show <标签名称>

#删除指定的标签
$ git tag -d <标签名称>

#将指定的标签提交到远程仓库
$ git push <远程仓库的别名> <标签名称>

#将本地所有的标签全部提交到远程仓库
$ git push <远程仓库的别名> –tags 

Git submodule

Git Submodule 允许一个git仓库,作为另一个git仓库的子目录,并且保持父项目和子项目相互独立。使用git管理的项目开发中,如果碰到公共库和基础工具,可以用submodule来管理。

例如:

  • 公共库是lib.git, 地址:git@github.com:lib.git
  • 需要使用公共库的项目是proj.git,地址:git@github.com:proj.jit

Add a submodule

$ git submodule add git@github.com:lib.git <local path> 其中,是需要保存的目录名

该命令实际会做三件事情:首先,clone lib.git到本地;然后,创建一个 .gitsubmodule 文件标记submodule的具体信息;同时,更新.git/config文件,增加submodule的地址:

delete a submodule

首先,需要删除 .git/config.gitsubmodle 文件里submodule相关的部分,然后执行:

$ git rm --cached <local path>

才能将submodule的相关文件从你的本地仓库里清理掉。

如果要clone一个附带submodule的项目,submodule的文件不会自动随父项目clone出来(其实只会clone出 .gitsubmodle 这个描述文件),还需要执行如下命令取出submodule里的文件:

$ git submodule update --init --recursive

Take an example

Generally

给出一个在父项目 proj.git 里添加submodule项目 lib.git 并使用的示例:

(用户A) 创建新的代码仓库:

mkdir proj
cd proj
git init
git add --all

(用户A) 添加pdlib作为submodule:

git submodule add git@github.com:lib.git
git commit -m "first commit with submodule"
git remote add origin git@github.com:proj.git
git push origin master

(用户B) 签出刚刚新建的代码仓库并使用:

git clone git@github.com:proj.git
cd foo
git submodule update --init --recursive

(用户B) 发现lib.git有修改,他把proj.git仓库的lib.git也同步到该版本:

cd lib
git pull
git status        # 此时如果lib.git有修改,就可以看到not staged commit
cd ..
git add lib
git commit -m "update lib.git"
git push origin master

(用户C) 更新proj.git仓库,同时也需要更新submodule:

git pull origin master
git status        # 记得执行git status,可以看到lib.git的改动
git submodule update

【注】这种情况下,需要清楚lib.gitproj.git实际就是两个独立的git仓库,针对lib.git的修改,需要在lib目录下commit。注意submodule必须是在master分支修改,如果proj.git在其他分支上开发,那么针对lib目录的修改需要先切回master分支。

(用户D) 想直接在proj.git仓库里修改lib目录的内容:

cd lib
git checkout master  # 注意修改lib需要在master分支上
edit xxx.txt
git add xxx.txt
git commit -m "update xxx.txt"
git push origin master

(用户D) 需要显式的把刚在lib目录上的修改添加到proj.git仓库里去:

cd proj
git status        # 每次在commit之前查看一下status是好习惯
git add lib
git commit -m "update lib.git"
git push origin master

Merge request

如今很多gitlab项目都采取merge request方式来进行codereview,步骤如下:

  1. 先在本地创建一个本地分支local_branch。

  2. 改动local_branch你需要改动的代码。

  3. 进入项目根目录下,运行如下代码,将local_branch推到远程分支。

    $ git add .
    $ git commit -a -m "first commit"
    $ git push origin local_branch
    
  4. 在gitlab上面操作,进入项目下,点击merge request选项,然后选择之前推到远端的local_branch和要合并到哪个分支,比如合并到master上。

  5. 点击merge request

Pull request

pull request是针对github的,操作步骤同merge request类似。“Pull Request 是一种通知机制。你修改了他人的代码,将你的修改通知原来的作者,希望他合并你的修改,这就是 Pull Request。”

流程:

  1. fork别人的代码,克隆到自己的仓库。
  2. 在自己的仓库修改后的分支上,按下New pull request按钮。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Metroplitan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值