git常用命令

2023-05-16

一、git工作原理图

在这里插入图片描述

二、git基础命令

0x01 git help

git help [comand]	#查看帮助

0x02 git config

git config --global user.name "redwand_kali"
git config --global user.email "123456@qq.com"
git config --global core.editor vim	#设置vim编辑器
git config --list
git congfig --unset --global user.name

–global选项实际是在修改家用户目录下的~/.gitconfig文件,查看如下。

root@kali2020:~# cat .gitconfig
[user]
	email = 123456@qq.com
	name = redwand_kali

–local选项是修改项目中的变量,实际是修改project/.git/config文件,如下。

root@kali2020:~/pytest/.git# git config --local user.name "kali"
root@kali2020:~/pytest/.git# cat config
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[user]
	name = kali

0x03 git init

git init #初始化

初始化执行完成后会在项目目录中生成.git文件夹

root@kali2020:~/pytest/.git# ls -l
total 32
drwxr-xr-x 2 root root 4096 Apr 15 10:44 branches
-rw-r--r-- 1 root root  112 Apr 15 11:04 config
-rw-r--r-- 1 root root   73 Apr 15 10:44 description
-rw-r--r-- 1 root root   23 Apr 15 10:44 HEAD
drwxr-xr-x 2 root root 4096 Apr 15 10:44 hooks
drwxr-xr-x 2 root root 4096 Apr 15 10:44 info
drwxr-xr-x 4 root root 4096 Apr 15 10:44 objects
drwxr-xr-x 4 root root 4096 Apr 15 10:44 refs

0x04 git status
查看当前工作区的文件

root@kali2020:~/pytest# git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	info.php

nothing added to commit but untracked files present (use "git add" to track)

0x05 git add
将工作区中的文件添加到暂存区

root@kali2020:~/pytest# git add info.php
root@kali2020:~/pytest# git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   info.php
git diff #查看工作区和暂存区之间文件区别

0x06 git commit

root@kali2020:~/pytest# git commit
[master (root-commit) f1af694] add info.php
 1 file changed, 3 insertions(+)
 create mode 100644 info.php
root@kali2020:~/pytest# git status
On branch master
nothing to commit, working tree clean

非交互式提交版本信息

git commit -m "add info.php"

0x07 git log
查看提交记录

root@kali2020:~/pytest# git log
commit 7819ceb1522ae7d1b0a035f7f4e03c50032ce0ea (HEAD -> master)
Author: redwand_kali <123456@qq.com>
Date:   Wed Apr 15 11:57:52 2020 -0400

    add test.py

commit 8e5f71d1802568be22663949c57dd1c505b64124
Author: redwand_kali <123456@qq.com>
Date:   Wed Apr 15 11:56:03 2020 -0400

    add sty.css

git log --oneline

root@kali2020:~/pytest# git log --oneline
7819ceb (HEAD -> master) add test.py
8e5f71d add sty.css
f1af694 add info.php

0x08 git mv
对暂存区的文件名进行修改,同时修改了工作区的文件名。mv命令只适用于未添加到暂存区文件名的修改。

root@kali2020:~/pytest# touch mvtest.js
root@kali2020:~/pytest# git add mvtest.js
root@kali2020:~/pytest# ls
info.php  mvtest.js  sty.css  test.py
root@kali2020:~/pytest# git mv mvtest.js my.js
root@kali2020:~/pytest# ls
info.php  my.js  sty.css  test.py

0x09 git rm
暂存区的文件如果被rm命令删除后,会出现deleted状态,仅此此时要删除暂存区的文件,就要使用git rm命令,如下。

root@kali2020:~/pytest# touch my.js
root@kali2020:~/pytest# git add my.js
root@kali2020:~/pytest# rm my.js
root@kali2020:~/pytest# git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   my.js

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    my.js

root@kali2020:~/pytest# git rm my.js
rm 'my.js'
root@kali2020:~/pytest# git status
On branch master
nothing to commit, working tree clean

git rm --cached 在暂存区删除文件,文件不被跟踪。

root@kali2020:~/pytest# touch my.js
root@kali2020:~/pytest# git add my.js
root@kali2020:~/pytest# git rm my.js
error: the following file has changes staged in the index:
    my.js
(use --cached to keep the file, or -f to force removal)
root@kali2020:~/pytest# git rm --cached my.js
rm 'my.js'
root@kali2020:~/pytest# git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	my.js

nothing added to commit but untracked files present (use "git add" to track)

git rm --cached 暂存区中删除,提交后删除master分支文件,而本地工作区文件不删除。

root@kali2020:~/pytest# ls
info.php  sty.css
root@kali2020:~/pytest# git rm --cached sty.css
rm 'sty.css'
root@kali2020:~/pytest# git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	deleted:    sty.css

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sty.css

root@kali2020:~/pytest# git commit -m "delete sty.css"
[master 3aa357d] delete sty.css
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 sty.css
root@kali2020:~/pytest# git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	sty.css

nothing added to commit but untracked files present (use "git add" to track)

git rm -f 在暂存区和本地同时删除文件。

root@kali2020:~/pytest# git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   my.js

root@kali2020:~/pytest# git rm -f my.js
rm 'my.js'
root@kali2020:~/pytest# ls
info.php  sty.css  test.py

git rm 第一步git rm删除暂存区文件,第二步git commit提交操作删除master分支中文件,同时会删除本地工作区文件。由于此时暂存区已经没有文件,因此不能使用git checkout命令撤回操作。

root@kali2020:~/pytest# ls
info.php  sty.css  test.py
root@kali2020:~/pytest# git rm test.py
rm 'test.py'
root@kali2020:~/pytest# git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	deleted:    test.py

root@kali2020:~/pytest# git commit -m "delete test.py"
[master 5df6170] delete test.py
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 test.py
root@kali2020:~/pytest# ls
info.php  sty.css

0x0A git checkout – <file>
to discard changes in working directory,丢弃工作区改变操作。

git checkout -- <file>

0x0B git reset
由于–hard修改工作区文件,建议谨慎使用。

git reset <version> --soft #将版本库中内容撤回到暂存区
git reset <version> --mixed #默认选项,将版本库和暂存区内容撤回,只保留工作区
git reset <version> --hard #修改工作区、暂存区、版本库中内容

0x0C git reflog
当确实执行了git reset --hard文件时候,可以使用reflog命名恢复

root@kali2020:~/pytest# git reflog
7819ceb (HEAD -> master) HEAD@{0}: reset: moving to 7819ceb
87a1c78 HEAD@{1}: revert: Revert "add sty.css"
c849fd9 HEAD@{2}: revert: Revert "delete sty.css"
dd8dfd3 HEAD@{3}: revert: Revert "add sty.css"
eaeec47 HEAD@{4}: commit: add sty.css
f5b677b HEAD@{5}: commit: del sty.css
32b7f43 HEAD@{6}: revert: Revert "Revert "add sty.css""
11e5bcc HEAD@{7}: revert: Revert "add sty.css"
99dc28b HEAD@{8}: commit: add sty.css
0a22fb7 HEAD@{9}: commit: deleted sty.css
7aa4b1b HEAD@{10}: commit: add sty.css
3aa357d HEAD@{11}: commit: delete sty.css
5df6170 HEAD@{12}: commit: delete test.py
7819ceb (HEAD -> master) HEAD@{13}: commit: add test.py
8e5f71d HEAD@{14}: commit: add sty.css
f1af694 HEAD@{15}: commit (initial): add info.php
root@kali2020:~/pytest# git reset 7819ceb --hard
HEAD is now at 7819ceb add test.py
root@kali2020:~/pytest# git log --oneline
7819ceb (HEAD -> master) add test.py
8e5f71d add sty.css
f1af694 add info.php

三、git分支操作命令

0x0D git branch

git branch dev	#创建一个新的dev分支
git branch -d[-D] dev #删除dev分支
git branch -m dev2 dev #修改分支名称
git checkout dev #切换到dev分支
git checkout -b dev #创建一个dev分支,并切换到该分支

0x0E git merge

git merge dev #在master分支下运行命令,合并dev分支到master

第一种情况,master与dev不冲突,直接合并。不冲突是指当master分支与dev分支中,只有一个(dev)分支中内容修改,另一个没变时,使用Fast-forward方式合并分支。
master分支

root@kali2020:~/pytest# ls
info.php
root@kali2020:~/pytest# echo default > test.txt
root@kali2020:~/pytest# git add test.txt
root@kali2020:~/pytest# git commit -m "master default add test.txt"
[master 68204a8] master default add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

dev分支

root@kali2020:~/pytest# git branch dev
root@kali2020:~/pytest# git checkout dev
Switched to branch 'dev'
root@kali2020:~/pytest# ls
info.php  test.txt
root@kali2020:~/pytest# echo dev > test.txt
root@kali2020:~/pytest# git add test.txt
root@kali2020:~/pytest# git commit -m "dev add test.txt"
[dev c9ad94b] dev add test.txt
 1 file changed, 1 insertion(+), 1 deletion(-)
root@kali2020:~/pytest# git checkout master
Switched to branch 'master'
root@kali2020:~/pytest# git merge dev
Updating 68204a8..c9ad94b
Fast-forward
 test.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

此时log情况

root@kali2020:~/pytest# git log --oneline
c9ad94b (HEAD -> master, dev) dev add test.txt
68204a8 master default add test.txt
f1af694 add info.php

第二种情况,master与dev有冲突,先处理冲突后合并。这里有冲突是指master分支和dev分支都对同一个文件做了修改。
master分支

root@kali2020:~/pytest# ls
info.php
root@kali2020:~/pytest# echo default > test.txt
root@kali2020:~/pytest# git add test.txt
root@kali2020:~/pytest# git commit -m "master add test.txt"
[master b6069f3] master add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
root@kali2020:~/pytest# echo master > test.txt
root@kali2020:~/pytest# git add test.txt
root@kali2020:~/pytest# git commit -m "master modify test.txt"
[master 8bad7d2] master modify test.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

dev分支

root@kali2020:~/pytest# git checkout dev
Switched to branch 'dev'
root@kali2020:~/pytest# echo dev > test.txt
root@kali2020:~/pytest# git add test.txt
root@kali2020:~/pytest# git commit -m "dev modify test.txt"
[dev 8665249] dev modify test.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

出现冲突

root@kali2020:~/pytest# git checkout master
Switched to branch 'master'
root@kali2020:~/pytest# git merge dev
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

处理冲突,合并分支。

root@kali2020:~/pytest# vim test.txt
root@kali2020:~/pytest# cat test.txt
<<<<<<< HEAD
master
=======
dev
>>>>>>> dev
root@kali2020:~/pytest# git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
	both modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")
root@kali2020:~/pytest# git add test.txt
root@kali2020:~/pytest# git commit test.txt -m "merge dev"
fatal: cannot do a partial commit during a merge.
root@kali2020:~/pytest# git commit -m "merge dev"
[master 82bde45] merge dev
root@kali2020:~/pytest# git diff master..dev
root@kali2020:~/pytest#

第三种情况,禁用Fast-forward,可以将合并动作记录到版本控制中。

git merge dev --no-ff -m "merge dev --no-ff"

0x0F git stash
当在dev分支开发过程中,如果在工作区正在修改代码,直接切换到master分支的话,modified会改变master分支中文件,因此需要先用git stash命令将dev分支工作区修改的内容暂存起来。然后再修改bug,提交,最后到master合并。合并完成后git stash pop出栈,继续dev开发工作。

git stash #封存工作区修改代码的内容
git stash pop #dev分支释放封存区内容继续开发
git stash apply stash@{0} #弹出某个编号的内容
git stash list #查看封存几次
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git常用命令 的相关文章

  • 声纹识别调研

    1 基础概念 声纹 Voiceprint xff0c 是用电声学仪器显示的携带言语信息的声波频谱 现代科学研究表明 xff0c 声纹不仅具有特定性 xff0c 而且有相对稳定性的特点 成年以后 xff0c 人的声音可保持长期相对稳定不变 实
  • Gradle学习三 :AS自定义Gradle插件

    一 定义插件 1 File New Module Android Library 取名plugin1 2 删除plugin1目录下所有文件 xff0c 只保留build gradle 编写build gradle 代码如下 xff1a ap
  • Android Hook 一 Hook CloseGuard

    一 抛出问题 在上一篇 dalvik system CloseGuard 介绍了CloseGuard的原理和作用 xff0c 并在文中提到 APP端可以利用Hook REPORTER 在来实现客制化的上报提示信息 本章通过代码来学一下怎样H
  • Python小白学习笔记-day3

    第三章 Python基本数据类型 学习笔记 浮点数与整数 xff0c Python浮点数运算存在 不确定尾数 问题 xff0c 即两个浮点数运算 xff0c 有一定概率在运算结果后增加一些 不确定的 尾数 xff08 受限于计算机表示浮点数
  • Java实现凯撒密码

    Java实现凯撒密码 加密和解密代码 根据公式 C 61 xff08 P 43 key mod 26 P 61 xff08 C 43 key 1 mod 26 key 1 61 26 key 26 可知 c 61 char c a 43 k
  • Pycharm使用pip报错:Script file ‘D:\Anaconda3\envs\pytorch\Scripts\pip-script.py‘ is not present

    问题描述 xff1a 报错情况1 xff1a 使用pip安装报错 xff1a Script file D Anaconda3 envs pytorch Scripts pip script py is not present 报错情况2 x
  • pip提示版本低需要升级,WARNING: You are using pip version 20.1.1; however,version 20.2.3 is available.

    警告 xff1a 您使用的是pip版本20 1 1 xff1b 但是 xff0c 版本20 2 3是可用的 You should consider upgrading via the 39 e python38 python exe m p
  • manjaro换源

    安装Linux系统必定先换源 xff01 xff01 xff01 x1f601 换源这一块 xff0c 我认为debian系 xff08 如Ubuntu xff09 以及Red Hat系 xff08 如fedora xff09 与基于Arc
  • WARNING: Ignoring invalid distribution -ip (d:\python3.7.5\lib\site-packages)

    警告原因 xff1a 之前安装插件失败 中途退出 xff0c 导致插件安装出现异常导致的 解决方法 xff1a 找到警告信息中报错的目录 xff0c 然后删掉 开头的文件夹
  • Linux上安装ntp

    问题 要同步6台服务器上的时间 xff0c 主要为了以后安装大数据软件做准备 xff0c 这里就需要安装ntp软件 解决 安装ntp和配置环境 1 gt 准备工作 xff1a 关闭防火墙 xff08 一定要关防火墙 xff0c 我是直接永久
  • ubuntu20.04上安装mysql

    目录 安装卸载 安装 命令安装 xff1a 更新源 sudo apt update 默认下载 xff0c 因为下载其他版本太复杂了 xff0c 这里默认是mysql8 0 29 sudo apt install mysql server y
  • arch安装和配置

    问题 安装arch 这里就不赘述相关的步骤 xff0c 我是看b站一个视频 xff0c 下面会给出网址 xff0c 但是要提示一下 xff0c 网络部分是错误的 xff0c 要更改一下 安装之后要配置相关的东西 xff0c 安装完成之后就是
  • (记录)电脑维修指南

    问题 自己在2020年的时候花了将近1500块自己组装了一台计算机 xff0c 但是经常出现蓝屏 xff0c 自动重启 xff0c 并且显示硬件问题 xff0c 2022年的时候也拆开过修过一次 xff0c 也和客服battle了几次 xf
  • 代码复现问题以及解决

    问题 cuda版本不匹配 xff0c 对于版本不匹配问题真的很难受CPU版本还有GPU版本问题包安装 xff0c apex加速的安装 xff0c transformer版本也会限制python的版本程序运行 xff0c 如果程序写的是比较好
  • one-hot向量形式

    one hot向量 one hot向量将类别变量转换为机器学习算法易于利用的一种形式的过程 xff0c 这个向量的表示为一项属性的特征向量 xff0c 也就是同一时间只有一个激活点 xff08 不为0 xff09 xff0c 这个向量只有一
  • c语言中的位移位操作

    先要了解一下C语言里所有的位运算都是指二进制数的位运算 即使输入的是十进制的数 xff0c 在内存中也是存储为二进制形式 lt lt 用法 xff1a 格式是 xff1a a lt lt m xff0c a和m必须是整型表达式 xff0c
  • iOS动画(Core Animation)

    一 CABaseAnimation 移动动画 void testPositionAnimation CGFloat tempViewWidth 61 50 CGFloat tempViewY 61 300 UIView tempView 6
  • 使用Linux命令生成随机密码

    使用SHA算法来加密日期 xff0c 并输出结果的前10个字符 xff1a span class token function date span 43 s span class token operator span sha256sum
  • CoreData 从入门到精通(三)关联表的创建

    CoreData 从入门到精通 xff08 三 xff09 关联表的创建 上篇博客中讲了 CoreData 里增删改查的使用 xff0c 学到这里已经可以应对简单的数据存储需求了 但是当数据模型复杂起来时 xff0c 例如你的模型类中除了要
  • 安装golang开发环境,vscode

    官网 https golang google cn dl span class token builtin class name cd span data www span class token function wget span ht

随机推荐