Git基础:常用操作

配置相关

git的配置文件:

  • Windows:%HOMEPATH%.gitconfig

%HOMEPATH%和%USERPROFILE%是Windows平台的高频环境变量,读者应当了解。

查看配置文件内容:

# Windows平台
type %HOMEPATH%\.gitconfig

输出内容:

[http]
        sslVerify = false
[user]
        name = 'hao'
        email = 'hao@xxx.com.cn'
[credential "https://example.com"]
	    username = me
[credential "https://example2.com"]
	    username = me

配置SSH key

推荐使用SSH的方式访问仓库内容,因为HTTPS需要用户名密码认证,密码变更的话,会导致无法访问。

先检查是否配置用户名及邮箱:

git config --global --list
# 如果没有配置,则进行配置
git config --global user.name "yourname"
git config --global user.email "your@email.com"

先检查下是否已生成rs密钥,是否已存在id_rsa和id_rsa.pub两个文件,如果已存在那么自行斟酌是否删掉:

cd ~/.ssh
ls

生成rsa密钥:

# 生成密钥
ssh-keygen -t rsa -C "your@email.com"

配置SSH:
打开github或gitlab的设置页面,在【增加密钥】页面填入id_rsa.pub里的内容即可。

配置HTTP代理

对于内网开发环境,当无法下载外网仓库资源时,配置Git代理以解决此问题:

# 代理可以是http://127.0.0.1:1080,或者不带协议127.0.0.1:1080,按实际情况
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy http://127.0.0.1:1080
# 取消代理
git config --global --unset http.proxy 
git config --global --unset https.proxy 

仓库帐号密码变更

对于github/gitlab的密码发生变更导致的pull/push失败,可以尝试通过下面的方法解决:

git config --system --unset credential.helper

然后重新输入账号密码即可

关于credential.helper的更多使用细节推荐查看Git官网的介绍

提交记录相关

commit

git commit -m 内容可以通过单引号来换行,比如:

$ git commit -m '
> 1.aaaaa
> 2.bbbb
> '
[master b25154b] 1.aaaaa 2.bbbb
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ss.txt

git commit --amend命令查看和修改上一次commit的信息,已push的不能改:

git commit --amend

checkout

  • 切换分支或历史节点
    checkout用于切换分支这点大家都知道,而有的时候我们需要让本地代码回到某个commitId历史节点,其实也是用的这个命令。比如:我想看下很早之前的一个版本,某个方法在整个项目的调用情况(Find Usage),此时就可以进行如下操作:
# 查看历史commitId
git log --pretty=oneline

# 切换代码至那个节点(注意本地代码先commit或stash保存一下)
git checkout commitId

# 重新切换回当前分支(比如master)
git checkout master
  • 放弃本地文件修改
# 放弃单个文件修改
git checkout file_name

# 放弃当前目录修改
git checkout .

show追踪文件提交记录

# 查看文件的所有提交记录
git log --pretty=oneline filename
# xianshi me
git log -p filename
# 查看指定某次提交的详情
git show commitID filename

rebase多个commit合并为一个commit

有时候编码中途需要合并他人的代码,不得已中间需要临时保存一下,造成很多不必要的中间commit,git支持将这些commit合并后统一提交,前提是这些commit还没有push。

# 查看提交记录
git log --pretty=oneline

# 假设最近的三次提交ID分别是:333,222,111,我们需要合并333,222这两次提交
# 指针移动到111
git rebase -i 111

rebase命令执行后会进入vim模式,列出了333,222这两次提交操作命令,默认是pick,即重新执行commit,这当然不是我们希望的,我们是希望这些操作只有一次commit,那么只需要将除第一个pick(最近的那次)命令之外的其他pick命令都改为squash(或s)即可,然后输入:wq以保存并退出,接下来会进入到commit message 的编辑界面,输入提交日志内容,再次:wq以保存并退出即可。

在这里插入图片描述

注意事项:如果这个过程中有操作错误,可以使用git rebase --abort来撤销修改,回到没有开始操作合并之前的状态。

stash临时保存代码

与上面的场景差不多,编码过程中想要切换到别的分支或commit节点等操作,此时需要临时保存代码,我们不想为此提交一个无意义的commit记录,git为我们提供了stash命令,其特点是:

  1. 可以临时保存修改,转而去做其他操作,完成其他操作后,可以切换回当前分支,并恢复stash的修改内容;
  2. stash之后本地代码会回滚到修改前本地最近的一次commit(不要慌,代码没丢);
  3. 支持多次stash,以stack数据结构保存;
  • 创建stash
# 默认参数
git stash

# 自定义stash remark
git stash save "stash 1"

# 创建新的分支
git statsh branch "branch_name"
  • 应用stash
# 应用所有stash
git stash pop

# 多个stash时指定某个stash
git stash pop stash@{序号}
  • 查看/删除stash
# 列出所有stash
git stash list

# 删除所有stash
git stash clear

# 查看某个stash详情
git stash show stash@{序号}

# 删除某个stash
git drop stash@{序号}

reset放弃最近的commit修改记录

git log --pretty=oneline
# 找到目标commitId,并强制指针退回到那个提交版本
git reset --hard commitId

cherry-pick快速迁移commit修改

# 想要把B分支的commit(s)合并到分支A,先checkout到分支A,然后执行下面
git cherry-pick commitIdFromB
# cherry-pick默认会commit修改后的内容,如果不想合过来直接commit,则加上-n即可
git cherry-pick -n commitId
# cherry-pick默认复用原commitId的提交msg,如果想自己修改,则加上-e即可
git cherry-pick -e commitId

仓库相关

提交本地项目代码到远程仓库

我们本地已有代码,且远程仓库也创建好了,进行首次代码提交:

# 进入项目根目录
git init
# 先提交本地代码
git add .
git commit -m "First commit."
# 关联远程仓库(远程仓库先要创建好)
git remote add origin main "https://remote.repo.url.git"
# 拉取远程最新代码
git pull origin main --allow-unrelated-histories
# 上传代码到远程库
git push -u origin main

远程仓库

# 查看远程仓库名
git remote
# 查看远程仓库url
git remote get-url --all origin

远程仓库变更

分支相关

分支管理

  • 查看分支
# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 查看所有分支(如果远程仓库信息没有更新,可以手动git fetch origin更新一下)
git branch -a
# 查看本地分支与远程分支对应关系
git branch -vv

  • 创建分支
# 创建分支
git branch branch_name

# 若不存在则创建并切换分支;若存在则仅切换分支
git checkout -b branch_name

# 拉取远程分支到本地,并切换到该分支
git checkout -b branch_name origin/branch_name

创建好本地分支push到远程:git push -u origin <local_name>:<remote_name>

  • 删除本地和远程分支
# 删除本地分支,如果被删分支有未提交的代码会删除失败
git branch -d <branch_name>
# 强制删除分支
git branch -D <branch_name>
# 删除远程分支
git push origin --delete <branch_name>
  • 分支重命名
git branch -m oldName newName

分支切换

  • 切换分支
git checkout branch_name

# 若不存在则创建并切换分支;若存在则仅切换分支
git checkout -b branch_name

# 创建与远程分支对应的本地分支,并切换到该本地分支
git checkout -b branch_name orign/branch_name

分支合并

在分支A上合并分支B的修改:

# 切换到分支A
git checkout A
# 合并B,如果想要保留分支B的合并记录,加上--no-ff,表示no fast-forward
git merge B

标签相关

  • 查看标签
# 查看本地所有标签
git tag
  • 新增标签
# 基于当前最新一次commit创建标签
git tag tag_name

# 基于当前最新一次commit创建标签,带备注
git tag -a tag_name -m "备注内容"

# 指定commitId创建标签
git tag tag_name commitId

# 推送本地标签到远程
git push origin tag_name
  • 删除标签
# 删除本地标签
git tag -d tag_name

# 删除远程标签
git push origin :refs/tags/tag_name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值