【版本控制】Git常规操作命令

Git拉取远程仓库配置(SSH)

查看git配置

git config --list

初始化用户名、邮箱,如果你没有初始化过,那么直接:

git config --global user.name "输入你的用户名"
git config --global user.email "输入你的邮箱"	# 作用于用户每次提交时的配置

如果配置过,如有需要可以修改配置:

git config --global --replace-all user.name "输入你的用户名"
git config --global --replace-all user.email "输入你的邮箱" 

生成SSH秘钥

ssh-keygen -t rsa -C "注释"   # 生成秘钥 -C 用于添加备注,如不需要可忽略

三次回车看到以下信息即代表成功
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+LDAoRXAIS4fmR+9X/yrzX+hJ0dh41fsG3fo+RE4kAY company computer
The key's randomart image is:
+---[RSA 2048]----+
|..oo.    E       |
|...o o    . .    |
|..+ + .    +   . |
|.. * o o .. . .+o|
|  o + + S o  oo++|
|     . = . .  o=*|
|      . o   ..ooB|
|           o +o+o|
|          ..+.=o.|
+----[SHA256]-----+

查看秘钥

cat ~/.ssh/id_rsa.pub	# 打印公钥

添加公钥到远程仓库中(GitHub/GitLab/Gitee)

检验是否添加成功(首次使用需要确认并添加主机到本机SSH可信列表)以Gitee为例

ssh -T git@gitee.com

The authenticity of host 'gitee.com (116.211.167.14)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,116.211.167.14' (ECDSA) to the list of known hosts.
Bad packet length 2164556631.
ssh_dispatch_run_fatal: Connection to 116.211.167.14 port 22: message authentication code incorrect

$ ssh -T git@gitee.com
Hi tod! You've successfully authenticated, but GITEE.COM does not provide shell access.

拉取代码

git clone -b <branch_name> <url> # -b 指定分支,如省略则拉取默认分支

Git本地项目配置

初始化,会在当前目录自动创建 .git 文件夹,该文件是Git中最重要的文件夹,因为Git相关文件以及版本都将保存在该文件夹中

git init # 初始化
git status # 查看git状态

将指定文件添加到版本库的暂存状态

git add . # 添加当前目录下所有文件到暂存区

如果有出现警告:LF will be replaced by CRLF 则执行以下语句

git config --global core.autocrlf true	# https://www.jianshu.com/p/450cd21b36a4

将暂存区的文件提交到版本库

git commit -m '项目初始化'	# 提交到版本库,并填写版本说明。

获取远程仓库上的更新内容(需要先关联远程仓库)

git pull

将本地版本库的内容推送至远程仓库

git push

Git本地项目与远程项目关联

查看远程仓库

git remote

删除远程仓库

git remote rm origin

连接到远程仓库

git remote add origin <url>

将本地master分支内容以及版本信息推送到远程仓库

git push -u origin master # -u 后续可以直接通过git push推送  -f 强制用本地历史将远程覆盖(不推荐使用)

如果报错,代表远程有文件不在本地代码目录中

error: failed to push some refs to 'git@gitee.com:xxx.git'

执行以下命令合并代码再进行push

git pull --rebase origin master

另一种解决方式

输入以下命令会进入编辑界面,按i进入插入模式,填写合并说明,按ESC退出插入模式并输入:wq退出编辑

git merge origin/master --allow-unrelated-histories

git的四大工作区域

工作区(项目文件夹)

版本库(.git文件夹)

暂存区(.git中的index文件)

远程仓库

git add / commit

git add命令是将文件从工作区提交到暂存区,git commit是将文件从暂存区提交到版本库

添加当前目录下的所有文件到暂存区

git add . 

添加指定的目录或文件到暂存区

git add <dir/file>

提交暂存区的所有文件至版本库

git commit -m <message>

提交暂存区的指定文件至版本库

git commit [file] -m <message>

使用新的commit合并上一次的commit,可用于某次提交不完整时减少commit的记录

git commit --amend -m <message>

git fetch / pull

拉取远程仓库所有分支的更新到本地分支

git pull

将远程指定分支合并到本地当前分支

git pull origin <branch_name>

将远程指定分支合并到本地指定分支

git pull origin <remote_branch>:<your_branch>
$ git fetch origin master:temp # 从远程仓库master获取最新 在本地建立temp临时分支
$ git diff temp # 将当前分支和temp做对比
$ git merge temp # 合并

git push

将本地分支commit的内容全部推送到远程仓库

git push origin <branch_name>

删除远程分支

git push origin -d <branch_name>

git status

Untracked files:还未加入版本控制的文件

Changes to be committed:文件已在暂存区(add),但是还没添加到版本库(commit)

Changes not staged for commit:文件已修改,但是这些修改还没更新至暂存区(commit不会提交这块的内容)

对于Untracked files使用git add加入到版本控制

git add .

也可使用git rm --cached还原至未加入的状态

git rm --cached <file>

对于Changes not staged for commit使用git add将已修改的文件更新到暂存区

git add .

也可使用git checkout撤销修改(工作区回退)

git checkout . # 撤销所有修改
git checkout -- <file> # 针对具体文件

对于Changes to be committed使用git commit提交至版本库

git commit -m <message>

也可使用git reset退出暂存区

git reset HEAD -- <file>

git log

查看历史commit记录,如果记录过多,则按Page Up、Page Down、↓、↑来控制显示,按q退出历史记录列表

git log

git diff

修改git addgit commit
git diff比较的是工作区和暂存区的差别
git diff --cached比较的是暂存区和版本库的差别
git diff HEAD可以查看工作区和版本库的差别

查看指定文件的提交记录

git log -p <file>

自定义日志格式并取别名

git config --global alias.lg  "log --no-merges --color --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%C(yellow)%h%Creset %Cgreen(%cd) | %C(auto)%d%C(white) %s %C(bold blue)<%an>%Creset' --abbrev-commit"
git lg # 使用命令别名来输出自定义格式的日志

git reset

git reset --hard 版本号  #回滚到指定版本

    --hard 参数会将暂存区,工作区全部用指定提交版本的目录树替换掉(**会覆盖本地文件!**)
    回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换

    --soft 参数只将版本库的覆盖,不进行暂存区和工作区的覆盖(**会回退commit操作**)
	回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响)

    --mixed 或不使用参数,覆盖暂存区和版本库,但不覆盖工作区(**会回退add、commit操作**)
	回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响)
	
git reflog	# 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

按功能划分:

撤销对工作区的修改

以最新的存储节点做参照,撤销对工作区的修改

git checkout -- <file>  # 针对具体文件
git checkout . # 针对所有文件

撤销git add操作

撤销最近一次git add向暂存区提交的修改,只改变暂存区,不改变工作区

git reset HEAD -- <file>

撤销git commit操作

撤销上一次的commit,并将暂存区的文件从新提交(修改上次的commit)

git commit --amend -m <message>

撤销上一次的commit,通过 hard/soft/mixed来控制是否对暂存区和工作区产生影响

git reset --hard HEAD^

撤销具体的commit

git reset --hard <commit_id>

撤销push操作

1.使用git reset 直接删除指定范围的commit

2.使用git revert 不会删除commit,而是用新的commit来回滚

git reset HEAD向后移,而git revert HEAD向前进

git reset --hard <commit_id> # 本地撤销commit
git push origin HEAD --force # 强制将当前代码推送到远程仓库
git revert -n <commit_id> # 这里的commit_id指的是要回滚的commit
git commit -m <meaasge>
git push

git branch

查看所有本地分支

git branch  # -r 查看所有远程分支  -a 查看所有远程分支合本地分支

创建分支

git branch <branch_name> 

切换分支

git checkout <branch_name> 

创建并切换到新建的分支,以下两种方法都可以

git branch -m <branch_name> 
git checkout -b <branch_name> 

删除分支

git branch -D <branch_name>

将指定分支合并到当前分支

git merge <branch_name>

本地新建一个分支后,必须要做远程分支关联,否则git pull/push`会提示你添加关联

git branch --set-upstream-to=origin/<remote_branch> <your_branch> # remote_branch 远程分支名称 your_branch本地分支名称

也可以在创建本地分支的时候直接指定远程分支

git branch <your_branch> <remote_branch>

如果远程分支不存在,则需要先创建,然后通过git pull更新远程分支,再尝试进行关联

error: the requested upstream branch 'origin/dev' does not exist

可以通过git branch -vv查看关联关系

git branch --vv

git merge

合并指定分支到当前分支

git merge <branch_name>

当合并中出现冲突又不想解决可以终止本次合并,回到merge前的状态

git merge --abort # abort 终止合并 continue 继续合并

git stash

将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态

git stash save <meaasge> # meaasge 备注信息

查看“某个地方”存储的所有记录

git stash list

删除指定编号的记录

git stash drop stash@{num} # stash@{num} stash从0开始排序,越后添加的数值越小,num填对应的数值

清空“某个地方”

git stash clear

将第一个记录从“某个地方”重新拿到工作区(可能有冲突)

git stash pop

将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)

git stash apply stash@{num}

查看最新保存的stash和当前目录的差异

git stash show # -p 查看详细的不同

查看指定的stash和当前目录的差异

git stash show stash@{num}

从最新的stash创建分支

git stash branch <branch_name>

从指定的stash创建分支

git stash branch <branch_name> stash@{num}

git tag

tag列表

git tag

新建一个tag在当前commit

git tab <tag_name>

新建一个tag在指定的commit

git tag <tag_name> <commit_id>

删除本地tag

git tag -d <tag_name>

推送tag到远程

git push origin <tag_name>

git rebase

衍合,可以得到更优雅的提交树

通过 git merge合并会存在分支,而通过 git rebase合并则是一条直线的

git rebase <branch_name>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值