• Git操作


    文章原文:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

    注意问题

      1、目录名要避免含有中文

      2、编译文本时,编译器要使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

      3、在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

      4、HEAD 指向的版本就是当前版本

      5、工作区(Working Directory)就是你在电脑里能看到的目录。

      6、版本库(Repository)工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

      7、创建连接版本库:git remote add origin git@github.com:你在git上的用户名/learngit.git 然后通过  git push -u origin master  就可以把本地库的所有内容推送到远程库,由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的mater分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。每次本地提交后,只要有必要,就可以使用命令 git push origin master 推送最新修改。

      8、克隆版本库:git clone git@github.com:michaelliao/gitskills.git 要克隆一个仓库,首先必须知道仓库的地址,然后使用 git clone 命令克隆。Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快

      9、在版本回退里,每次提交,git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支

      10、创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

      11、分支策略:在实际开发中,我们应该按照几个基本原则进行分支管理:首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

      12、并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

    • master分支是主分支,因此要时刻与远程同步;

    • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

    • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

    • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

           总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

      13、多人协作的工作模式:

    1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

    3. 如果合并有冲突,则解决冲突,并在本地提交;

    4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

      14、rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了

      15、退出vim编译器:一直按住esc ,再连续按大写的z两次就退出来了。

      16、退出git log:按下英文状态下的q

      17、使用git进行远程仓库连接,url写错了或者远程仓库的地址改了,需要在本地也相应地对Url进行修改。

      有三种方法:

        第一种:先删除原来的url,再创建新的url: git remote rm origin

                             git remote add origin git@github.com:用户名/text.git

        第二种:修改url命令 git remote set-url URL 

          第三种:手动修改.git/config文件,找到url进行相应的修改。

    操作代码:

      1、git pwd

        命令用于显示当前目录。

      2、git init

        将当前目录变成Git可以管理的仓库。

      3、vi 文件名.文件类型

        如果文件不存在,就创建该文件,并可以对它进行修改,若文件存在,则可以对它进行修改

      4、git add 文件名.文件类型

        将文件添加到仓库,实际上就是把文件修改添加到暂存区stage。(该指令操作完没有显示任何信息是最好滴)。

      5、git commit -m "提交说明"

        实际上就是把暂存区stage的所有内容提交到当前分支branch,-m后面输入的是本次提交的说明,方便以后的修改,commit可以一次性提交多个文件,所以可以先git add添加多个文件。

      6、git log

        显示从最近到最远的提交日志,若嫌输出信息太多,看得眼花缭乱的,可以试试用 git log --pretty=oneline

      7、git reset --hard HEAD^

        退回到上一个版本,若想回到原来的版本可以:

          方法一:git log 查看原来版本的commit id,然后用 git reset --hard 版本的id(id不用写全,写前面几位就好了)   

          方法二:git reflog 查看原来版本的commit id,然后用 git reset --hard 版本的id(id不用写全,写前面几位就好了)   

      8、git status

        查看工作区的状态

      9、git diff HEAD -- 文件名.文件类型

        查看工作区和版本库里面最新版本的区别

      10、git checkout -- 文件名.文件类型

        将对应文件放在工作区的修改全部撤销

        有两种情况:

          一种是对应文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

          一种是对应文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。若在commit之前,则用 git reset HEAD 文件名.文件类型  将暂存区                                stage的修改撤销掉,之后再 git checkout -- 文件名.文件类型

      11、git rm 文件名.文件类型

        删除指定文件,git status 可以查看哪些文件被删除了。git rm 文件名.文件类型 删除文件后,再 git commit -m “提交备注”,就可以将文件从版本库中删除。

        若不想删错了,则可以通过 git checkout -- 文件名.文件类型  来恢复文件

      12、ls

        列出当前文件和目录,也可以使用 ls -als 来显示隐藏的文件和文件夹

      13、git checkout -b dev(创建并切换)

        创建dev分支,然后切换到分支,也可以通过 git branch dev(创建分支), git checkout dev(切换分支)来完成该操作

      14、git branch

        查看当前分支,当前分支前面会有一个*号

      15、git merge 分支名

        用于合并指定分支到当前分支,该命令操作后出现的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。                然后并不是所有的合并都可以用Fast-forward

      16、git merge --no-ff -m “备注信息” 分支名

        参数 --no-ff 表示禁用Fast-forward  合并后的历史有分支,能看出来曾经做过合并,而Fast-forward 合并就看不出来曾经做过合并。

      17、git branch -d 分支名

        删除指定分支

      18、git log --graph

        可以看到分支合并图。git log --graph --pretty=oneline --abbrev-commit

      19、git stash

        可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

      20、git stash list

        查看存储的工作区工作现场还在,Git的把藏匿内容存在某个地方了,但是需要恢复一下,有两个办法:

        方法一:git stash apply 恢复,但是恢复后,藏匿内容并不删除,需要你用git stash drop来删除

        方法二:git stash pop 恢复的同时把藏匿内容也删了

      21、git branch -D 分支名

        强制删除还没有合并的分支

      22、git remote

        查看远程库的信息  加上参数-v 可以显示更详细的信息

      23、git push origin master

        推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上

      24、git checkout -b dev origin/dev

        创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支,若提交的同时,其他伙伴也对它进行了修改,则需要 git pull  把最新的提交的origin/dev抓下来,然后,                  在本地合并,解决冲突,再推送

      25、git branch --set-upstream-to=origin/dev dev

        当git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置devorigin/dev的链接之后再 git pull

      26、git config --global alias.st status

        用st表示status,之后就可以 git st 来代替 git status

      27、git config --global alias.unstage 'reset HEAD'

        将 reset HEAD 用 unstage替代

      28、git config --global --unset alias.你取的别名

        将指定别名删除

      29、cat .git/config

        查看git配置文件

      30、git diff

        查看上次修改的内容

      31、cat 文件名.文件类型

        查看对应文件的内容

  • 相关阅读:
    【转载】在Linux中使用VS Code编译调试C++项目
    【转载】Visual Studio 2015 for Linux更好地支持Linux下的开发
    【转载】ODBC, OLEDB, ADO, ADO.Net的演化简史
    【转载】OLE DB, ADO, ODBC关系与区别
    【转载】ADO,OLEDB,ODBC,DAO的区别
    【转载】Linux系统启动流程
    91. Decode Ways
    90. Subsets II
    89. Gray Code
    88. Merge Sorted Array
  • 原文地址:https://www.cnblogs.com/Rainm/p/9698869.html
Copyright © 2020-2023  润新知