git命令行常用操作

常用命令

mkdir <文件夹名> ---创建文件夹

cd <文件夹名> ---打开文件夹

ls ---显示项目目录

vi <文件名> ----打开文件

英文模式下的 i/insert --进入编辑模式

英文模式下的 esc ----推出编辑模式

英文模式下的 ZZ/:wq ---退出修改

git status ---查看工作目录的状态(未添加追踪、待提交、提交状态)

git branch -a ---查看远程分支状态

git branch ---查看本地分支状态

git log ------ 查看提交的版本信息

下载项目、切换分支和上传代码

  1. 克隆项目:

    git clone 项目地址(.git)
    
  2. 拉去远程分支代码(不太会用)

    git pull origin master  // 直接覆盖本代代码
    git fetch origin master  // 还要手动将代码添加到本地
    
  3. 切换分支

    • 本地有这个分支

      git checkout <分支名>
      
    • 本地没有这个分支,要获取远程的某分支

      # 方式一:
      git checkout b <分支名>  //是创建并切换到目标分支
      git reset --hard origin/chunyan     ---用远程分支chunyan的代码完全覆盖当前分支
      
      # 方式二
      git pull
      git branch -a
      git checkout <分支名>
      
      # 方式三
      #拉取远程分支
      git checkout -b 本地分支 origin <远程分支>
       
      #拉取远程分支
      git pull origin 远程分支 
       
      #建立分支
      git branch --set-upstream-to origin/远程分支名  本地分支名
       
      #拉取分支
      git pull
       
      #遇到本地冲突,先删除本地分支,再重新拉取远程分支
      git branch -D 本地分支名称
      
  4. 上传代码

    git push origin <分支名>      ---- 将本地分支提交到远程仓库
    

本地修改代码提交

  1. git status ---------可以查看有没有改变没有被跟踪

  2. git add filename ----对改变建立跟踪,可以通过 git reset命令撤销

  3. git commit ---------将改变缓存到本地服务区,不可以通过git reset命令撤销

    # 快捷操作
    git add .  # 添加所有文件
    git commit -am '提交描述' # 快速提交所有文件
    
    # 修改提交
    git commit -amend '描述文字' 
    # 如果工作目录没有已经追踪的文件(通过git add .追踪),则只会出现如下对话框让你更改提交描述
    # 如果工作目录有意境追踪的文件,它会自动将追踪的文件添加到提交目录,并出现下面的对话框让你更改提交描述
    
  4. git push -----上传改变

本地代码的修改、提交和撤销提交

三棵树原理

请查看-相册-三棵树
  1. git add <文件名> -----将沙盒的文件添加到索引

  2. git commit -m '描述' ---- 将索引的快照提交

    查看本地已经commit但没有push的分支: git cherry -v

    # usage: git cherry [-v] [<upstream> [<head> [<limit>]]]
    git cherry -v origin/master HEAD~1
    # upstream代表分支  --有时候可以不要,有时候不要又会报错
    # HEAD~1表示提交的最新的一个版本;HEAD~2表示最近提交的两次分支,下面的为最新的
    
    image-20200601183316996
  3. git push origin <分支名> ----将本地提交传到远程仓库

    注意:上传到远程仓库的代码,不是以每次上传作为一个版本,而是以提交过的记录作为一个版本

  4. 撤回提交(没有上传到远程服务)

    • reset: 以可预见的方式直接操纵三棵树

      git reset --soft HEAD~ # 撤销最近的一次提交,即将最近一次提交退回到索引状态,HEAD指向上一次提交(HEAD~表示父节点)
      git reset --mixed HEAD~ # 不仅撤销最近一次提交,还会取消暂存区(既索引)所有内容,但工作目录不变
      git reset --hard HEAD~ # 撤销最近一次提交,同时删除暂存区和工作目录的所有内容。这是 git reset仅有的一个危险用法 
      git push origin develop --force  (本地分支和远程分支都是 develop)
      也可以把 HEAD~  直接改成你想要退回的版本号
      
  5. 撤回提交(提交已经上传到远程服务)

    git log  # 查看提交的版本信息
    git revert <commit_id> # 写那次提交的commit_id就撤销那个版本;还是只对本地文件进行修改,要在push origin <upstream>上传撤销的动作
    
image-20200601185548152

注意:以上两个撤回操作操作的都是本地仓库,最终要把改变上传到远程仓库才能在远程仓库起效

合并分支

网址

创建三个分支

  • 在master分支下创建了一个master.txt文件

    在master分支下创建了一个文件
    
    # 切换到dev分支
    git checkout dev
    
    # 将 tingting分支的代码合并到dev分支
    git merge tingting
    
    # 提交修改
    git push   直接提交了代码
    
  • 通过master分支拉起一个dev分支,并在dev分支下添加文件dev.txt。并提交代码到远程仓库

    从master分支拉去一个dev分支
    
  • 通过dev分支拉起一个ssui分支,并在ssui分支下添加文件ssui.txt。并提交代码到远程仓库

    从dev分支拉去一个ssui分支
    

更改dev分支的代码,并合并到master分支

  • 切换到dev分支,并且修改代码

    //master.txt
    我在dev分支改了master.txt文件的内容
    
  • 提交dev分支的代码

    git commit -a -m '第一次提交dev分支的代码'
    
  • 合并dev分支的代码到master分支

    # 切换到master分支
    git cehckout master 
    # 在本地将dev分支的代码合并到master
    git merge dev
    # 如果没有冲突(因该是不会有冲突),就直接提交代码
    git push 
    

修改ssui分支的代码,并合并到master分支上

  • 切换到ssui分支,并修改master.txt文件如下:

    // master.txt
    我在ssui分支里修改了master分支的代码
    
  • 提交ssui分支的代码

    git commit -a -m '第一次提交ssui分支的代码'
    
  • 将ssui分支的代码合并到master分支

    # 切换到master分支
    git cehckout master 
    # 在本地将dev分支的代码合并到master
    git merge ssui
    # 这是就会出现冲突,并且分支的标志会变成 [master|MERGING]
    # 根据提示修改冲突,然后提交代码
    git commit -a -m '合并ssui分支的代码到master分支上'
    git push
    

    image-20200428094342487

    注意:

    1. 合并代码前,记得先提交一下本地代码
    2. 当多个分支同时修改了待合并的分支(master)的同一个地方时,在合并时就可能出现冲突。这是就必须解决冲突再提交代码

终止合并

当合并两个分支的代码出现冲突的时候

# 会尝试恢复到进行合并之前的状态。唯一的不好之处在于如果合并之前你的巩固走目录有未暂存、未提交的变更,就会被覆盖。所以在执行合并之前一定要确保你的工作目录是干净的。
git merge --abort
image-20200519083549105
# 回到之前的某一次状态。这种方式会清楚工作目录里的所有内容,一定要确认自己已经不需要这些变更了,才执行这条命令
git reset --hard HEAD~1

当我将本地文件还原到上两个版本后,再执行操作时就会出现下面的提示,要怎么解决

image-20200519082708160

用远程分支覆盖本地分支

# 1.我想将test分支上的代码完全覆盖dev分支,首先切换到dev分支
git checkout dev
# 2.然后直接设置代码给远程的test分支上的代码
git reset --hard origin/test

# 3.执行上面的命令后dev分支上的代码就完全被test分支上的代码覆盖了,注意只是本地分支,这时候还需要将本地分支强行推到远程分支。
git push -f
原文地址:https://www.cnblogs.com/tina-12138/p/12996821.html