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

一帆风顺 ⛵️⛵️⛵️

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

目 录CONTENT

文章目录
Git

Git 工作中的常用命令

M酷
2021-10-09 / 4 评论 / 18 点赞 / 3,474 阅读 / 4,721 字 / 正在检测是否收录...
广告 广告

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 同步代码,参考这里

8.1、将一个仓库的代码复制一份到另一个仓库

1、创建旧仓库的裸克隆

git clone --bare https://github.com/exampleuser/old-repository.git

2、迁移到新仓库

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git

3、删除旧仓库的克隆版

rm -rf old-repository.git

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常见错误

1、拉取代码时提示 fatal: refusing to merge unrelated histories

我们只要加上 --allow-unrelated-histories 再试即可。

git pull origin master --allow-unrelated-histories 

2、error: You have not concluded your merge (MERGE_HEAD exists)

原因是之前 pull 下来的代码自动合并失败,合并流程没有完全结束导致的。
解决办法:切换到项目文件夹中,使用 git 命令(这里提供 2 种方法,如果 a 方法没有用,可以尝试 b 方法,但是要慎重,避免造成本地代码丢失。)

a、保留本地的更改,中止合并 -> 重新合并 -> 重新拉取

git merge --abort
git reset --merge
git pull

b、舍弃本地代码,远端版本覆盖本地版本(慎重)

git fetch --all
git reset --hard origin/master
git fetch

3、gpg failed to sign the data

其实就是签名失败了,我们可以直接关闭签名功能,就是commit没有了绿标

git config commit.gpgsign false;

4、Unable to create ‘XXX/.git/index.lock‘: File exists

Git 执行操作时会自动生成 index.lock 文件,操作结束后会自动删除。这样做的目的是避免同时操作同一个文件夹。

只需要打开项目根目录下的 .git 文件,找到其中的 index.lock 文件即可。

【参考文章】

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

18
广告 广告

评论区