侧边栏壁纸
博主头像
M酷博主等级

祝君一帆风顺 ⛵️⛵️⛵️

  • 累计撰写 40 篇文章
  • 累计创建 36 个标签
  • 累计收到 240 条评论

目 录CONTENT

文章目录
Git

Git 工作中的常用命令

M酷
2021-10-09 / 4 评论 / 15 点赞 / 1,023 阅读 / 3,969 字 / 正在检测是否收录...

git

常用命令

1、git 拉取&推送

git clone [仓库地址]         # 克隆仓库,加上-b 可以拉指定分支
git pull             				# 拉取远程最新代码 + 合并
git fetch               		# 拉取远程最新数据
git push             				# 推送代码到远程

2、git 加入到暂存区、临时工作区

git add .           	    			# 将文件的【新增、修改】添加到暂存区
git add -u                     	# 将文件的【修改、删除】添加到暂存区
git add -A                     	# 将文件的【新增、修改、替换、删除】添加到暂存区

3、git 保存/弹出工作现场

适用于开发时忘记切换分支的场景,后面不加文件名就是针对所有文件。

git stash [文件名]           			# 保存⼯作现场到栈
git stash pop [文件名]           	# 从栈中弹出⼯作现场

4、git add 命令后,

  • 如何撤销已经加入到暂存区的文件呢?
  • 取消跟踪某文件?
  • 放弃修改?
git reset HEAD -- .             	# 撤销所有
git reset HEAD -- [文件名]					# 撤销特定目标
git checkout [文件名]							# 从缓冲区检出文件
git rm --cached [文件名]						# 取消跟踪某文件
git restore [文件名]								# 放弃修改

5、git 查看/创建/修改/删除/拉取/提交本地或远程分支

git branch                                        		# 查看本地分支
git branch -r                                        	# 查看远程分支
git fetch origin new_branch                           # 拉取远程分支
git branch -f branch_name commitID		      # 将指定分支移到某个commit上
git branch -b new_branch                              # 创建并切换至本地分支
git branch -m old_branch new_branch                   # 重命名本地分支
git branch -d old_branch    				        					# 删除本地分支
git push origin :old_branch														# 删除远程分支
或 git push origin --delete old_branch     	
git push --set-upstream origin new_branch             # 推送本地分支到远程/更新远程分支

6、拉取远程分支并创建本地分支

方法一
git checkout -b [本地分支名x] [origin/远程分支名x]

使用该方式会在本地新建分支x,并自动切换到该本地分支x。

采用此种方法建立的本地分支会和远程分支建立映射关系。

方式二
git fetch origin [远程分支名x] :[本地分支名x]

使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动 checkout

采用此种方法建立的本地分支不会和远程分支建立映射关系。

7、链接本地仓库到远程仓库

git init      															# 如果当前项目没有git版本库,需要先通过这个命令初始化仓库
git remote -v      													# 通过这个命令查看当前仓库链接的远程仓库
git remote add origin [远程仓库地址]    			# 添加远程仓库链接,与远程代码仓库建立连接

8、fork别人仓库并与原仓库保持同步

1、fork 源仓库到自己的 github
2、git clone [fork的仓库地址]
3、git remote add upstream [原仓库地址]  与原仓库建立链接,可通过 git remote -v 查看当前的源,也可通过 git remote remove 分支名 移除对应远程分支
4、切换到原仓库,执行 git pull upstream master 拉取代码,执行 git merge upstream/分支名 进行合并

// 基本操作
git remote add upstream [远程仓库git地址] 		# 本地新加⼀个新的远程库
git fetch upstream 			 										# 从远程仓库拉去代码
git chekout master 													# 切换分⽀
git merge upstream/master   								# 合并远程分⽀

tips:当然也可以通过反向 pull request 同步代码,参考这里

9、git 删除误提交的文件

git rm -r --cached .idea     				# 删除.idea文件夹
git commit -m '删除.idea'    			 	# 提交,添加操作说明
git push -u origin master     			# 将本次更改更新到github项目上去
git checkout .      		      			# 本地所有修改的、没有提交的,都恢复到原来的状态,checkout【文件名】丢弃指定文件的修改
git clean -df  			      					# 清理untracked files,释放工作区空间

10、git 标签操作

git tag     			      								# 列出所有标签,加上-l命令可以使用通配符来过滤tag,如 git tag -l '2.0.'
git show [标签名]     	      						# 查看标签详情
git tag [标签名]    	      							# 添加标签,可加上-a参数创建一个带备注的tag,如git tag -a tagName -m "my tag"
git tag -d [标签名]                  		# 删除标签
git push origin :refs/tags/[标签名]     	# 删除远程标签
git push origin [标签名]            			# 将标签推送到远程,git push tags 推送本地所有标签
git checkout [标签名] 	      						# 切换到指定tag

11、git主分支同步到其它分支

改代码的时候忘记切换到指定分支,直接在主分支上改了,已经提交到 git 上了。

这时需要先切换到分支上,然后执行 git merge master,其它分支同理。

12、推送子分支代码到父分支

当我们从某个分支迁出一个分支并提交修改后,想直接把该分支代码合并到父分支,但又不想切到父分支再 mergepush。此时可以直接在当前分支上执行 git push origin 当前分支名:父分支名

13、git 忽略指定文件(不从版本库删除)

项目中一些需要在本地修改,又不能写进.gitignore中,就需要通过命令了

git update-index --assume-unchanged /path/to/file            # 忽略
git update-index --no-assume-unchanged /path/to/file         # 取消忽略

14、git 回退版本(git reset 和 git revert)

// 使用git log查看日志和版本号
git reset --hard  HEAD^  														 	# 回退到上一个版本(不加--hard,只回退,不会更新工作区)
git reset --hard [目标版本号]  +  git push -f           # 【撤销到某个版本】重置版本,会删除重置版本之后的所有版本
git revert -n [目标版本号] + git commit -m + git push   # 【撤销到某个提交】反转版本,会保留之前的提交版本,创建一个新的版本

15、git 合并代码(git merge 和 git rebase)

git merge [分支名]             # 【合并分支】会自动生成一个新的合并commit,--no-diff参数可保留之前的分支commit
git merge --squash [分支名]		# 【清洗提交历史】只合并不commit
git rebase [分支名]            # 【变基操作】拉直分支图(美观),不会像merge那样产生新的commit(尽可能少的commit),比较干净,适用于个人项目或者冲突少的情况
git rebase -i [分支名]               # 交互式 rebase,可以选择哪些commit需要rebase

16、配置用户名密码

git config --global user.name "yourName"                        # 设置用户名 
git config --global user.email "aa@qq.com"            		# 设置邮箱
git config list                             			# 查看配置列表

也可以直接用 github 官方客户端配置。

17、提交多行 commit 信息

有两种方法实现多行信息提交:

  1. git commit -m “标题” -m “描述”
  2. git commit -m "
    标题
    描述
    "

18、查看日志

git log						# 详细日志
git log --oneline				# 简短⽇志
git reflog					# 操作记录,包括回退记录也会被显示

19、把指定 commit 移动到当前分支上

可以把多个 commit 移动到当前分支上。

git cherry-pick commitId1 commitId2

20、添加子模块

可以使用 git submodule 命令实现。

git clone https://git.oschina.net/gaofeifps/body.git
git submodule init && git submodule update

# 下面这一句的效果和上面三条命令的效果是一样的,多加了个参数  `--recursive`
git clone https://git.oschina.net/gaofeifps/body.git --recursive

参考:gitsubmodule 使用方法

21、查看指定时间段代码提交行数

示例为:统计 “M酷” 在 2021-09-01 至 2021-09-11 期间提交的代码行数。

git log --author="M酷" --since=2021-09-01 --until=2021-09-11 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -;        

GIT常见错误

拉取代码时提示 fatal: refusing to merge unrelated histories,我们只要加上 --allow-unrelated-histories 再试即可。

git pull origin master --allow-unrelated-histories 

【参考文章】

Git中文文档
Merge,Rebase,Cherry-Pick 了解一下
Git branch 练习工具

15
广告 广告

评论区