首页 > 其他分享 >git个人常用

git个人常用

时间:2022-12-27 20:34:31浏览次数:81  
标签:文件 常用 git 个人 -- 暂存区 commit 分支

前言

  • 本篇是个人的git指令备忘录,会根据实际情况不断完善

常用指令

配置

  • 显示当前git配置

    git config --list
    
  • 编辑git配置文件

    git config -e [--global]
    
  • 设置提交代码时的用户信息

    git config [--global] user.name "[name]"
    
    git config [--global] user.email "[email address]"
    

将某目录变为git可管理的仓库

git init

image-20221225233842408image-20221225233857871

生成的.git文件夹用于跟踪管理版本,对此文件进行操作,可能会破坏git仓库

  • 其他重要指令:

    1. 新建一个目录,将其初始化为Git代码库

      git init [project-name]
      

将文件添加进版本库

  • git只能跟踪文本文件的改动(其他的亦是如此);对于图片、视频这类二进制文件git可以管理它们,但不可跟踪它们的变化

  • 步骤:

    1. 将文件添加进暂存区

      git add {filename};
      

      image-20221225235131655

    2. 将文件提交至仓库

      git commit -m "rayTracingInOneWeekend.md instance"
      

      image-20221225235427147

      其中""里的是提交的注释

    3. 检查是否还有未提交文件(验证是否提交)

      git status
      

      image-20221225235611446

    4. 若此时修改文件内容,查看文件具体修改的内容

      git diff {filename}
      

      image-20221226000049671

  • 其他指令:

    1. git commit [file1] [file2] ... -m [message] //提交暂存区的指定文件到仓库区
      
    2. git commit -v //提交时显示所有diff信息
      
    3. 使用一次新的commit,替代上一次提交 。 如果代码没有任何新变化,则用来改写上一次commit的提交信息

      git commit --amend -m [message]  //重做上一次commit,并包括指定文件的新变化
      

版本回退

  • 查看修改文件的历史记录

    我再进行一次 "git commit -m "rayTracingInOneWeekend.md instance"",然后查询历史记录

    git log
    

    image-20221226001121366

    其中,commit为版本号,Date下的就是每次提交的注释。可以看到有两个版本

    • 当然可以对上面反应的内容进行缩减

      git log --pretty=oneline
      

      image-20221226001337189

  • 回退往前的版本。两种方法:

    1. 比较麻烦的

      git reset --hard HEAD^
      

      一次就HEAD^,两次就两个^,n次就n个^image-20221226001814943

      • 查看当前版本的内容

        cat {filename}
        

        image-20221226002102054

    2. 更加实用的

      git reset --hard HEAD~{n}
      

      image-20221226003711308

      其中,n表示想回溯的前n个版本

  • 回溯到往后的版本。步骤:

    1. 获取想要回溯的版本号

      git reflog
      

      image-20221226002355558

    2. 回溯

      git reset --hard {版本号}
      

      image-20221226002504900

  • 其他指令

    1. 恢复暂存区的指定文件到工作区
    git checkout [file]
    
    1. 恢复某个commit的指定文件到暂存区和工作区
    git checkout [commit] [file]
    
    1. 恢复暂存区的所有文件到工作区
    git checkout .
    
    1. 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
    git reset [file]
    
    1. 重置暂存区与工作区,与上一次commit保持一致
    git reset --hard
    

撤销修改、删除的文件

  • 撤销对文件进行的修改。有如下三种方法:

    1. 如果知道想要撤销的内容,可以手动修改,再"git add"添加进暂存区,最后commit

    2. 按版本回退的方法,回退至目标版本。"git reset --hard HEAD~{n}"

    3. git checkout -- {filename}
      

      意为把{filename}文件在暂存区做的修改全部撤销

      其中,又分为两种情况:

      1. 目标文件修改后 但没有放入暂存区。使用"git checkout -- {filename}"将回到版本库的版本
      2. 目标文件已经放入暂存区,这时进行了修改。使用"git checkout -- {filename}"将回到添加暂存区时的状态
  • 撤销删除文件

    • 不彻底(相当于放入回收站)删除分支中的文件。两种方法:

      • 手动删除

      • 命令行删除

        rm {filename}
        

        image-20221226133156343image-20221226133203120image-20221226133610446

        可以看到并没有完全删除

    • 彻底删除

      git add {filename}
      git commit -m "delete {filename}"
      
    • 恢复删除文件

      git checkout -- {filename}
      

      image-20221226134335102

      image-20221226134401840

  • 其他指令

    1. 删除工作区文件,并且将这次删除放入暂存区

      git rm [file1] [file2] ...
      
    2. 停止追踪指定文件,但该文件会保留在工作区

      git rm --cached [file]
      
    3. commit恢复到某个旧版本

      git reset --hard {版本号}
      
    4. 删除暂存区文件,工作区不改变

      git rm --cached {filename}
      

远程仓库

  • 本地git仓库 和 github仓库 通过SSH加密传输。我们先按以下步骤进行初始设置:

    1. 创建SSH Key。在用户目录下(我的是"C:\Users\Elysia")看看是否存在".ssh"文件夹且文件夹内是否有"id_rsa"(私钥)和"id_rsa.pub"(公钥)这两个文件,若存在忽略以下命令;不存在,则输入:

      ssh-keygen -t rsa -C "{邮箱号}"
      

      image-20221226145456701

      后面还需输如创建文件的路径(默认就好)和密码

      成功后如图:image-20221226215948852

    2. 打开github -> 点击” settings” -> 点击左边的"SSH and GPG Keys" -> 点击"New SSH key" -> 填写"Title"(任意) 和 "Key"(来自 .ssh文件夹里的id_rsa.pub) -> "Add SSH key"

      1. 打开id_rsa.pub。在命令行中将路径切换至id_rsa.pub的路径,再使用命令行语句"more id_rsa.pub"image-20221226221640695
  • 添加远程库。我们在本地和github都创建了一个Git仓库,且希望这两个仓库进行远程同步。步骤:

    1. 进入github,在右上角点击"+"找到"New repository"
    2. 填写"Repository name",再点击"Create repository"image-20221226224656277
    3. 根据上图中的提示和你的情况,输入命令行即可。其中 git push意为 把当前分支main推送至远程库,-u意为 把本地main分支和远程main分支进行关联。以后可以简化命令,只要本地进行了提交,即可用"git push origin master"直接推送image-20221226233345039image-20221226233825628
  • 远程库克隆。远程库如果更新了新内容,如何将其克隆到本地库?

    git clone {远程库网址}
    

    image-20221226234904949

  • 其他命令

    1. 显示某个远程仓库的信息

      git remote show [remote]
      
    2. 增加一个新的远程仓库,并命名

      git remote add [shortname] [url]
      
    3. 上传本地指定分支到远程仓库

      git push [remote] [branch]
      
    4. 显示所有远程仓库

      git remote -v
      
    5. 下载远程仓库的所有变动

      git fetch [remote]
      
    6. 删除指定远程仓库

      git remote rm [remote]
      

创建&合并分支

  • 创建并切换分支

    git checkout -b {分支名称}
    

    image-20221227000508154

  • 创建分支

    git branch {分支名称}
    

    image-20221227000611586

  • 切换分支

    git checkout {分支名称}
    

    image-20221227000648733

  • 查看分支(*为当前分支)

    git branch
    

    image-20221227000725924

  • 合并目标分支的内容到当前分支

    git merge {分支名称}
    
  • 删除分支

    git branch -d {分支名称}
    

    image-20221227003919331

  • 其他指令

    1. 列出所有远程分支

      git branch -r
      
    2. 列出所有本地分支和远程分支

      git branch -a
      
    3. 删除远程分支

      git push origin --delete [branch-name]
      

解决冲突

  • 现在有两个分支,两个分支都各自对同一目标文件进行了改动且"git add",若让其中一个分支融合另一个分支,此时便会产生冲突
  • Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
  • 解决冲突:
    1. 手动删除要合并的另一个分支多余的内容。即删除"=======" 和 ">>>>>>>"及它们之间的内容
    2. 手动删除目标分支多余的内容。即删除"<<<<<<<" 和 "=======" 及它们之间的内容
    3. 都保留。只删除"<<<<<<<" 、"======="、">>>>>>>"
    4. 再 "git add {冲突文件名}","git commit -m {注释}", "git push"

bug分支

  • 假设我们在主分支master的一个分支ray工作,若主分支的另一个分支graphics出现bug,我们需要切换分支去修复它,但当前分支的内容并没有完成,该怎么办呢?

    虽然我们可以commit提交,但这样会产生多余且不必要的记录

    有更好的做法:我们可以使用命令"git stash"将工作推入Git栈中,如此一来便隐藏当前分支的工作。我们就可以放心去bug分支进行修复

  • 查看隐藏的工作:

    git stash list
    
  • 但是如何把工作恢复呢?有两种方法:

    1. 栈中文件还在

      git stash apply
      

      栈中内容并没有删除,还需要使用命令:

      git stash drop
      

      一次删除一条

    2. 删除栈中文件

      git stash pop
      

      恢复的同时把栈中文件也删除

重要知识点

工作区&暂存区

  • 工作区:git可管理的仓库
  • 版本库:".git"属于版本库,不属于工作区。版本库里含有许多重要的内容,如stage(暂存区),自动创建的第一个分支master,指向master的指针HEAD
  • 暂存区:使用git add添加进的区域便是暂存区。而git commit提交,是把暂存区内的所有内容提交至当前分支

分支策略

  • 主分支非常稳定,主要用于发布新版,一般情况在其他分支进行分支,而非主分支。操作完后,需要发布,则将其他分支合并至主分支

个人所遇报错

  • 报错:Another git process seems to be running in this repository, e.g.image-20221226134628928

    另一个git似乎正在这个存储库中运行,当前这个情况是因为打开了编辑器。需要终止编辑器;如果它仍然失败,一个git进程可能已在此存储库中崩溃:手动删除文件以继续

    解决方法:

    1. 直接删除".git"文件夹内的"index.lock"文件

    2. git命令

      git clean -f .git/index.lock
      
  • 报错:error: cannot rebase: Your index contains uncommitted changes.
    error: Please commit or stash them.

    解决步骤:

    1. git stash
    2. git pull --rebase
    3. git stash pop

reference

Git使用教程,最详细,最傻瓜,最浅显,真正手把手教 - 知乎 (zhihu.com)

Git报错:Another git process seems to be running in this repository - willingtolove - 博客园 (cnblogs.com)

id_rsa.pub如何查看_糖醋里脊Jeremy的博客-CSDN博客_id_rsa.pub在哪

标签:文件,常用,git,个人,--,暂存区,commit,分支
From: https://www.cnblogs.com/chenglixue/p/17008922.html

相关文章

  • linux-常用系统状态检测命令
    ifconfigifconfig命令用于获取网卡配置与网络状态等信息unameuname命令用于查看系统内核与系统版本等信息uname-acat/etc/redhat-releaseuptimeuptime用于查......
  • linux-常用系统工作命令
    echoecho命令用于唉终端输出字符串或变量提取后的值echorobotecho$SHELLdatedate命令用于显示及设置系统的时间或日期date#按照某种格式输出date"+%Y-%m-%......
  • c++一些常用的知识
    时间复杂度:数量级     能承受的大致规模     常见算法0(1)         任意               输出O(lo......
  • Collection集合常用方法
           ......
  • Docker镜像上传至dockerhub个人仓库
    1、首先需要在hub.docker.com上注册一个账号  2、在linux机器上登录(dockerlogin)输入dockerlogin然后输入账号密码进行登录。 3、将镜像打上自己账号的标......
  • 关于iOS常用的26中公共方法,可copy的代码
    1.获取磁盘总空间大小//磁盘总空间+(CGFloat)diskOfAllSizeMBytes{CGFloatsize=0.0;NSError*error;NSDictionary*dic=[[NSFileManagerdefaultManager]attribu......
  • git 常用命令
    新建分支gitcheckout-bxxx切换分支gitcheckoutxxx查看分支//查看本地分支gitbranch//查看远程分支gitbranch-r//查看本地+远程gitbranch-a提交到......
  • 【Ubuntu搭建gitlab】gitlab搭建过程
    一、服务器硬件水平搭建gitlab服务器最低配置要求2核4G,低于这个配置的服务器运行效果很差二、安装依赖项sudoapt-getupdatesudoapt-getinstall-ycurlopenssh-s......
  • 常用汇编指令对标志位的影响
    加法指令 ADD(addition)指令对标志位的影响:                     CF=1   最高有效位向高位有进位                    ......
  • 从工具到实践:如何在GitHub上保障开源项目安全?
    1998年,ChristinePeterson创造了“开源软件”这个词。她解释道:“这是刻意为之,为了让其他人更容易理解这个领域”。同年,O’Reilly组织了首届“开源峰会”。开源软件受到更......