git笔记

本文详细介绍了Git的基本原理和常用命令,包括工作区、暂存区、版本库的概念,以及git checkout、git branch、git add、git commit、git pull、git push等操作。还阐述了本地配置、强制覆盖代码、SSH key配置以及开发流程,包括代码评审和冲突解决策略。内容涵盖了Git的日常使用和开发协作流程。
摘要由CSDN通过智能技术生成

✨基本原理

在这里插入图片描述

  • 工作区:自己电脑上看到的项目,也就是自己写的代码。
  • 暂存区:介于工作区和版本库之间的一个缓冲区(保存在.git/index),用户改过的代码必须先执行git add添加到暂存区,然后才能执行git commit将代码更改同步到版本库分支。另外,git commit -a可以一次性将代码的更改和删除添加到缓存区并同步到版本库,但新建的文件不会添加到缓存区,还是要用git add添加。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
  • HEAD:指向 master 分支的一个"游标"。图示的命令中出现 HEAD 的地方可以用 master 来替换。

假设项目结构为

|--MyProject/
   |--.git/
   |--text.txt
   |--readme.md

🍅常用命令解读

git checkout

git checkout <filename>  # 将暂存区指定文件覆盖本地
git checkout .           # 将暂存区的所有文件覆盖本地,不影响新建但没添加到暂存区的文件

# checkout 指定分支名或使用-f时,将直接从版本库拉取代码覆盖暂存区和本地
git checkout master            # 切换分支。将HEAD游标切换到master分支,本地和暂存区都将被覆盖为master
git checkout -f  # 从版本库拉取所有代码强制覆盖暂存区和本地,不影响新建但没添加到暂存区的文件
git checkout master <filename> # 从版本库拉取指定文件覆盖本地

git branch 分支管理

git branch [branchname]  # 创建分支
git branch -d [branchname] # 删除本地分支(包含未合并的更改和未推送的提交,会失败)
git branch -D [branchname] # 强制删除本地分支
git push origin --delete branch_name  # 删除远程分支
git checkout [branchname]  # 切换分支
git checkout -b [branchname]  # 创建并切换到新分支

# 设置远程origin/master作为本地分支master的pull获取源
git branch --set-upstream-to=origin/master master

git add 从工作区向暂存区添加更改

git add [file1] [file2]  # 添加一个或多个文件到暂存区
git add [dir]            # 添加指定目录到暂存区,包括子目录
git add .                # 向暂存区添加文件:新文件(new)、修改(modified)文件,不含删除(deleted)文件
git add -u               # 向暂存区添加文件:修改(modified)、删除(deleted)文件,不含新文件(new)
git add -A  # -A是--all的缩写;向暂存区添加文件:修改(modified)、删除(deleted)、新文件(new)

git commit 从暂存区提交更改到版本库

git commit -m "本次提交说明信息"

git pull

将远程指定分支 拉取到 本地指定分支上:

git pull origin <远程分支名>:<本地分支名>

将远程指定分支 拉取到 本地当前分支上:

git pull origin <远程分支名>

将与本地当前分支同名的远程分支 拉取到 本地当前分支上(需先关联远程分支,方法见文章末尾,只需关联一次)

git pull

git push

将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反):

git push origin <本地分支名>:<远程分支名>

将本地当前分支 推送到 与本地当前分支同名的远程分支上(注意:pull是远程在前本地在后,push相反):

git push origin <本地分支名>

将本地当前分支 推送到 与本地当前分支同名的远程分支上(需先关联远程分支,方法见文章末尾)

git push

将本地分支与远程同名分支相关联

git push -u origin <本地分支名>

git remote

添加远程仓库

git remote add <远程别名,如origin> git@github.com:用户名/仓库名.git

帮助

当不确定某个命令的使用方法时,可以用-h查看说明,例如git add -h将看到git add的用法如下

root@XD-PC:~# git add -h
usage: git add [<options>] [--] <pathspec>...

    -n, --dry-run         dry run
    -v, --verbose         be verbose

    -i, --interactive     interactive picking
    -p, --patch           select hunks interactively
    -e, --edit            edit current diff and apply
    -f, --force           allow adding otherwise ignored files
    -u, --update          update tracked files
    --renormalize         renormalize EOL of tracked files (implies -u)
    -N, --intent-to-add   record only the fact that the path will be added later
    -A, --all             add changes from all tracked and untracked files
    --ignore-removal      ignore paths removed in the working tree (same as --no-all)
    --refresh             don't add, only refresh the index
    --ignore-errors       just skip files which cannot be added because of errors
    --ignore-missing      check if - even missing - files are ignored in dry run
    --chmod (+|-)x        override the executable bit of the listed files
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

🍉常见操作操作流程

本地首次配置git用户

要使用git进行提交代码,需要先设置名字和邮箱。其中,名字随意,只会显示在git提交日志中,而邮箱务必设置准确,是远程仓库具有权限的邮箱。

git config --global user.name "YourName"
git config --global user.email "YourEmail@gmail.com"

强制覆盖本地代码

git fetch --all         # 拉取远程代码,但不合并到本地版本库分支
git reset --hard origin/master # 将远程代码覆盖本地、暂存区、本地版本库分支

配置github access ssh key

现在github不允许使用用户名+密码进行push了,推荐使用ssh-key方式。

ssh-keygen -t rsa -C "git配置的邮箱地址"

执行命令时的交互输入全都默认(直接回车)即可。默认会生成~/.ssh/下生成两个文件:

  • id_rsa 私钥,保密
  • id_rsa.pub 公钥,填写到github

随后打开github个人设置,如下图所示:
在这里插入图片描述
点击New SSH key之后即可看到下图所示的填写页面:在这里插入图片描述
最后点击Add SSH key提交后,即可在本地电脑自由自在的访问git仓库了~

【注意】
配置了ssh key之后,必须使用ssh拉取仓库。如果仍然使用https方式,会一直提示输入密码。

git clone git@github.com:Name/project.git

已经使用https拉到本地的仓库,可以vim .git/config修改其中的远程仓库链接为以上格式。

🍉 开发流程举例(含评审)

以百度iCode平台为例,从本地push到远程会自动进入评审阶段(而非直接合入)。

(1)本地开发阶段

方式1:开一个新分支(适合复杂长期开发的功能)

git checkout -b dev-test
# 开发......,开发好了,暂存、提交
git add .
git commit -m "把icafe卡片关联信息贴到这"
# 前往icode自行新建分支dev-test,然后把本地代码推上去,会自动进入评审阶段
git push --set-upstream origin HEAD:refs/for/dev-test
# 评审通过后可在icode评审页面合入主分支

方式2:直接在dev分支上开发(适合短期小功能)

# 开发完准备提交代码时,注意远程可能有更新哦~
# (1)将远程代码同步到本地仓库,但不改变已编辑未提交的文件
git fetch
git reset --soft origin/dev
# (2)提交自己修改的文件,推到远程库,自动进入评审
git add .
git commit -m "icafe卡片关联信息"
git push --set-upstream origin HEAD:refs/for/dev

(2) 提交阶段

提交(add、commit)代码之前,一般要先pull一下远程代码。如果远程代码与本地修改的代码有冲突,则pull失败:

error: Your local changes to the following files would be overwritten by merge:

此时,需要先将本地代码暂存,随后pull,最后再将暂存的代码取会工作区:

git stash        # 暂存本地修改内容
git pull
git stash apply  # 恢复本地修改内容

(3) 评审阶段

如果评审一次性通过,则直接在icode合入即可。如果评审不通过需要改怎么办?两种方法。
方式1:在原commit上做修改
改好代码后,直接追加到最后一次commit上。评审中会自动追加一个patch以供继续评审。

git add .
git commit --amend
git push origin HEAD:refs/for/dev

方式2:撤销commit,重新提交
这样会触发icode新的评审,需要手动在icode废弃前一次评审

# 先撤销提交:
git reset --soft HEAD^
# 修改代码....., 改好后提交:
git add .
git commit -m "把icafe卡片关联信息贴到这"
git push origin HEAD:refs/for/dev
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雪的期许

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

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

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

打赏作者

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

抵扣说明:

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

余额充值