Bootstrap

git基础指令大全

版本控制

  • git管理文件夹

  • 进入要管理的文件夹 — 进入

  • 初始化(提名) git init

  • 管理文件夹

  • 生成版本

  • .git ---- git在管理文件夹时,版本控制的信息

  • 生成版本

    git status 检测当前文件夹下的文件状态 (检测,检测之后就要管理了)-------当执行时,什么都没有,说明当前文件夹所有的文件都被管理起来了,生成一个版本

    git add index.html(我要管谁)

    git add . 当前没有被管理的文件全部管理

个人信息配置----一次即可

git config --global user.email "email"
git config --global user.name "name"
git config --glocal --list

  
git commit  -m  "描述信息(版本)"  --------(跳到另一个状态,生成一个版本)----------失败可能是因为没有个人信息配置
  

  
修改文件
  
git status ------------ modified:  我在上一个版本的基础上修改了一个状态 (modify -- 修改)
  
//相当于有新的文件(在生成文本)
  
git add    .   或者 文件名
  
git commit
  
  
  
  查看版本记录
  
  git log
  
  
  
  新增文件
  

添加文件

 touch wenjian
  1. mkdir(Make Directory)
    • 功能:用于创建新的目录(文件夹)。
    • 语法格式mkdir [选项] 目录名。例如,要创建一个名为 test 的目录,在终端中输入 mkdir test 即可。如果要创建多级目录(父目录不存在时一并创建),可以使用 -p 选项,如 mkdir -p parent/child 会创建 parent 目录及其子目录 child
  2. cd(Change Directory)
    • 功能:用于切换当前工作目录。
    • 语法格式cd [目录路径]。例如,要切换到名为 documents 的目录,假设该目录在当前路径下,可输入 cd documents。若要返回上一级目录,使用 cd..。输入 cd 不加任何参数,会切换到用户的主目录。例如,在 Linux 系统中,普通用户执行 cd 会回到 /home/用户名 目录。
  3. pwd(Print Working Directory)
    • 功能:用于显示当前工作目录的完整路径。
    • 语法格式pwd [选项]。通常直接使用 pwd 命令,它会输出当前所在目录的绝对路径。例如,当你在 /home/user/Documents 目录下执行 pwd,会输出 /home/user/Documents
ls [选项] [目录]

如果不指定目录,ls 会列出当前工作目录的内容。如果指定了目录,ls 会列出该目录的内容。

创建目录

mkdir 目录名称
pwd 作用是打印当前工作目录的完整路径。使用 pwd 命令可以帮助你确认当前所在的目录是否为目标仓库目录
ls  ls 是 “list” 的缩写,用于列出当前目录下的文件和文件夹
当你进入一个可能是目标仓库的目录后,使用 ls 命令可以查看该目录下的内容,以此来确认是否为目标仓库。因为 Git 仓库通常包含一个隐藏的 .git 文件夹,你可以通过 ls 命令查看是否存在该文件夹来判断

回滚

git reset --hard 版本号 在git log 里面的commit(不需要加引号)
git checkout -- 文件名

查看文件内容

cat 文件(加后缀) 命令直接查看某个文件的内容

从远程仓库下载文件

克隆分支时,只会显示主枝(但其实分支也有 ,可以直接git checkout branch(分支名))

git clone 和git pull有什么区别

  • git clone
    • git clone 用于将远程仓库完整地复制到本地。当你需要获取一个全新的项目副本,或者想要在本地开始对一个已存在于远程的项目进行开发时,就会使用这个命令。它会创建一个新的本地仓库,包含远程仓库的所有文件、提交历史、分支信息等。
    • 例如,你想要将 GitHub 上的一个项目复制到本地,可以使用以下命令:
git clone 远程仓库网址------------内部已经实现 git remote add origin 远程仓库地址
    • git pull 用于从远程仓库获取最新的提交,并将其合并到本地当前分支。当你已经在本地克隆了一个远程仓库,并且想要更新本地仓库的内容以与远程仓库保持同步时,就会使用这个命令。它实际上是 git fetchgit merge 两个命令的组合。
    • 例如,你已经克隆了一个项目到本地,并且在一段时间后想要获取远程仓库的最新更新,可以在本地仓库目录下执行以下命令:
git pull origin main

git pull origin dev 只会更新本地 dev 分支的内容,不会影响其他分支。

git clone 用于获取全新的远程仓库副本,而 git pull 用于更新本地已有仓库的内容,使本地分支与远程分支保持同步。

若要再回滚回来
git reflog
git reset --hard 版本号
列出分支/查看分支
git branch
创建分枝
git branch  分支名
创建的分支修改名字
git branch -m oldname newname
如何删除远程连接
git remote rm orign(远程仓库的代称)
推送分支
git push -u origin(远程仓库的代称)  分支名称
切换到分支

(回去也使用这个命令,但是回去的时候,相当于回到了之前的状态-----在分支上的修改,回去之后是没有的)

git checkout 分支名
将分支合并
git checkout master(你要合并到哪个分支上)
git merge bug(你要合并哪个分支)
合并时出现的bug
Merge branch 'bug' to fix critical bugs in the system.
2. 保存并退出编辑器
若使用 vim 编辑器:
按 Esc 键退出插入模式。
输入 :wq 并回车,这会保存你输入的提交信息并退出编辑器,Git 会完成合并提交。
合并之后,应该把不必要的分支删除
git branch -d bug(你要删除的分支)

冲突解决--------------手动解决

CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

意味着在合并分支时,Git 无法自动处理某些更改,从而产生了冲突。具体到这个例子中,冲突发生在 index.html 文件里。

  • 同一文件的同一部分被不同分支修改:比如,在主分支和 bug 分支里,都对 index.html 文件的同一行或者相邻行进行了修改。当你尝试合并这两个分支时,Git 就不知道该采用哪个更改,于是产生冲突。
  • 文件被删除和修改:一个分支删除了 index.html 文件,而另一个分支却对该文件进行了修改,这种情况下合并也会产生冲突。

冲突解决办法

要解决合并冲突,你需要手动编辑有冲突的文件,然后标记冲突已解决并提交更改。下面是具体步骤:

1. 识别冲突文件

Git 会在控制台提示哪些文件存在冲突,像这里提示 index.html 有冲突。你可以使用以下命令查看所有冲突文件:

git status

这个命令会列出所有包含冲突的文件,这些文件通常处于 “unmerged” 状态。

2. 编辑冲突文件

打开 index.html 文件,你会看到类似下面的冲突标记:

<<<<<<< HEAD
<!-- 这是当前分支(如主分支)的内容 -->
<div class="old-style">Old content</div>
=======
<!-- 这是要合并进来的分支(如 bug 分支)的内容 -->
<div class="new-style">New content</div>
>>>>>>> bug
  • <<<<<<< HEAD 表示当前分支的内容开始。
  • ======= 是分隔线。
  • >>>>>>> bug 表示要合并的 bug 分支的内容结束。

你需要手动决定保留哪些内容,删除冲突标记。例如,如果你想保留 bug 分支的更改,可以将文件修改为:

<div class="new-style">New content</div>
3. 标记冲突已解决

编辑完冲突文件后,使用以下命令将修改后的文件添加到暂存区,标记冲突已解决:

git add index.html
4. 提交合并结果

所有冲突都解决并添加到暂存区后,使用以下命令提交合并结果:

git commit

这时候可能会打开编辑器让你输入合并提交信息,输入合适的信息(如 “Resolve merge conflicts in index.html”)后保存并退出编辑器,合并操作就完成了。

vim a1.py(打开编辑器)

删除最后一次提交

如果你只是想删除最后一次提交,让仓库状态回退到上一次提交的状态,可以使用 git reset 命令。

git reset --hard HEAD~1
  • --hard 选项表示不仅将 HEAD 指针移动到指定的提交,还会将工作目录和暂存区的内容也重置为该提交的状态。
  • HEAD~1 表示上一次提交,HEAD 指向当前所在的提交,~1 表示向上移动一个提交。

执行该命令后,最后一次提交将被删除,工作目录和暂存区的内容也会恢复到上一次提交时的状态。需要注意的是,这种方式会永久删除最后一次提交,如果你之后又想恢复这次提交,操作会比较复杂。

情况二:删除中间的某次提交

如果你想删除中间的某次提交,可以使用 git rebase 命令结合交互模式来实现。假设你要删除的提交哈希值为 abc123,可以按照以下步骤操作:

  1. 找出要删除提交的前一个提交的哈希值。可以使用 git log 命令查看提交历史,找到该提交的前一个提交的哈希值,假设为 def456
  2. 进入交互式变基模式:
git rebase -i def456

执行该命令后,会打开一个文本编辑器,显示从 def456 之后的所有提交记录。找到你要删除的提交记录,将其前面的 pick 改为 drop,然后保存并关闭编辑器。
\3. Git 会按照修改后的提交顺序进行变基操作,将指定的提交删除。如果在变基过程中出现冲突,需要手动解决冲突,然后使用 git rebase --continue 继续变基操作。

情况三:删除远程仓库的提交

如果你已经将本地的提交推送到了远程仓库,要删除这些提交需要先在本地仓库进行上述操作,然后使用 git push -f 强制推送到远程仓库:

git push -f origin <branch-name>

其中,origin 是远程仓库的名称,<branch-name> 是你要推送的分支名称。需要注意的是,强制推送会覆盖远程仓库的提交历史,可能会影响其他开发者的工作,因此在团队协作中使用时要谨慎,最好提前和团队成员沟通。

    • 如果你在 Windows 系统上工作,希望文件使用 CRLF 换行符,可以执行:
git config --global core.autocrlf true
  • 如果你在 Unix/Linux 或 macOS 系统上工作,希望文件使用 LF 换行符,可执行:
git config --global core.autocrlf input
  • 若你不希望进行任何换行符转换,可设置为:
git config --global core.autocrlf false

退出

esc :wq

补充

git pull origin dev
等同于
git fetch origin dev
dit merge origin/dev

git分区

stash git stash可以将当前已经修改的文件暂存起来,将文件恢复到修改前的状态。同时可以在适合的时候还可以将进度还原。

# 把所有修改未提交的文件放入暂存区
git stash
# 把所有修改未提交的文件放入暂存区,并添加注释
git stash save 'message'

# 查看所有缓存区进度列表
git stash list

# 释放暂存区最新一个stash
git stash pop

# 恢复指定进度到工作区,这里的id是通过上面list命令得来的
git stash pop [id]

# 删除进度,不指定ID的话,默认删除最新的进度
git stash drop [id]

# 清空
git stash clear

tag

tag 是git仓库里面某分支某次commit标记。本质上还是commit的一个别名

查看 本地 所有tag
git tag or git tag -l
查看 仓库 所有tag
git ls-remote --tags origin 
创建 本地 tag
git tag -a <标签名> -m '标签内容文字描述'
创建 仓库 tag
将本地tag推送到仓库,就成了仓库tag
git push origin <标签名>
如果本地tag比较多,一次全部推送
git push origin --tags
删除本地tag
git tag -d <标签名>

进阶用法,为某个commit后的代码打tag标签
查看当前分支的提交历史 里面包含 commit id
git log --pretty=oneline 
git tag -a <标签名> 
or
git tag -a <标签名> <commitId> -m '标签内容文字描述'

作者:防己_DoLi
链接:https://juejin.cn/post/7165818788695408676
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
删除仓库tag
git push origin :refs/tags/<标签名>

将代码切换到某个标签
git checkout -b <tagName>

diff

git diff 命令,默认查看的就是 工作区 和 暂存区之间文件的差异
1.git diff : 查看工作区和暂存区之间所有的文件差异
2.git diff -- 文件名:查看具体某个文件 在工作区和暂存区之间的差异
3.git diff -- 文件名1 文件名2 文件名3:查看多个文件在工作区和暂存区之间的差异

修改内容
echo "添加内容" >> a.txt   

将工作区中修改的文件添加到暂存区后再比较差异情况
git diff HEAD : 查看工作区与最新版本库之间的所有的文件差异
git diff 具体某个版本 : 查看工作区与具体某个提交版本之间的所有的文件差异
git diff HEAD -- 文件名 : 查看工作区与最新版本库之间的 指定文件名的文件差异
git diff HEAD -- 文件名1 文件名2 文件名3 :查看工作区与最新版本库之间的 指定文件名的多个文件差异
git diff 具体某个版本 -- 文件名 : 查看工作区与具体某个版本之间的 指定文件名的文件差异
git diff 具体某个版本 -- 文件名1 文件名2 文件名3 :查看工作区与最具体某个版本之间的 指定文件名的多个文件差异
git diff 版本号1 版本号2 --stat : 查看两个版本之间的改动的文件列表
git diff 版本号1 版本号2 src : 查看两个版本之间的文件夹 src 的差异

# 查看reflog git reflog # 找到丢失提交的哈希值 git reset --hard

使用 git reflog 来找回之前的状态。通过查看引用日志,我们可以找到被删除的分支或者之前的提交,并重新创建分支或者将 HEAD 恢复到正确的状态。

总结

git init ----初始化

git status ----------管理目录下的文件状态 (新增和修改过的都是红色)

git add . 或者文件名 -----------管理指定文件(红变绿)

git config --global user.name “name”

git config --global user.email “email”------------个人信息配置

git commit -m “描述信息”------生成版本

git log ------查看版本记录

git reset --hard 目标版本号-----回滚(它之前的版本没有了)

git branch -----查看分支

git branch 分支名称 -----切换分支

git checkout 分支名称--------切换分支

git merge 要合并的分支 --------分支合并

git branch -d 分支名称 ----------删除分支

git remote add origin 远程仓库地址------给远程仓库起别名

git push -u origin 分支 ---------向远程推送代码

git clone 远程仓库地址 -------克隆远程仓库代码

git pull origin dev -----拉代码

git push -f 强推

包图

类图

用例图

git reset --hard HEAD~1 回到上一个版本

soft

只移动 HEAD 指针,暂存区和工作目录的内容都不会改变

远程仓库没有f3–被删除了

但是 git status — 还有绿色的 f3 -------说明还在暂存区

soft影响版本库,不影响工作区和暂存区

mixed

移动 HEAD 指针,同时重置暂存区,让暂存区的状态和指定提交版本一致,但工作目录里文件的内容不会改变。

mixed影响版本库、暂存区,不影响工作区

hard

不仅移动 HEAD 指针,还会重置暂存区和工作目录,让它们的状态都和指定提交版本完全一致

这意味着工作目录里的文件会被直接替换为指定版本时的内容,未提交的修改都会丢失,回到指定提交时的状态。

git status --------什么都没有------说明不在暂存区

hard影响版本库、工作区和暂存区

git clone 远程仓库地址 -------克隆远程仓库代码

git pull origin dev -----拉代码

git push -f 强推

包图

类图

用例图

git reset --hard HEAD~1 回到上一个版本

soft

只移动 HEAD 指针,暂存区和工作目录的内容都不会改变

远程仓库没有f3–被删除了

但是 git status — 还有绿色的 f3 -------说明还在暂存区

soft影响版本库,不影响工作区和暂存区

mixed

移动 HEAD 指针,同时重置暂存区,让暂存区的状态和指定提交版本一致,但工作目录里文件的内容不会改变。

mixed影响版本库、暂存区,不影响工作区

hard

不仅移动 HEAD 指针,还会重置暂存区和工作目录,让它们的状态都和指定提交版本完全一致

这意味着工作目录里的文件会被直接替换为指定版本时的内容,未提交的修改都会丢失,回到指定提交时的状态。

git status --------什么都没有------说明不在暂存区

hard影响版本库、工作区和暂存区

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

;