Git常用操作总结

来源:互联网 发布:java不是方法的特征 编辑:程序博客网 时间:2024/05/18 02:54
  1. 安装
    a、Ubuntu安装Git只需要直接使用 apt-get install git
    b、 通用的安装方法,下载源码编译安装:进入config目录,一次使用make, make install 编译安装即可

  2. 配置自己的git账户,可以是github,coding等等。

    git config --global user.name "账户名称"git config --blobal user.email "邮箱"
  3. 创建仓库并提交
    仓库:亦即版本库,在项目根目录下,输入 git init 进行版本库创建或者重新初始化一个版本库。
    版本库创建完成后,会在项目根目录下生成一个 .git 目录,存放着git进行版本控制所需要的一些文件。具体目录文件如下:
    这里写图片描述
    其中,有几个目录和文件比较重要,分别是:
    Objects 目录:存储所有的数据内容
    refs 目录:存储指向数据(分支)提交对象的指针
    HEAD 文件:指示目前被引用的分支, 使用git branch 切换分支或git commit 提交等操作时就会用到HEAD 文件信息
    index 文件:存放暂存区信息
    这里,由于没有进行 git add 目录将项目文件添加到暂存区,没有index文件,只要执行 git add . 再次查看就可以看到index文件了
    这里,我先创建一个 text 文件,然后使用 git status 查看当前状态:
    项目状态

    最后,使用 git commit -m "first commit" 进行提交即可将当前版本的项目提交到仓库。
    其中 -m后面带的是此次提交的信息,通常是写本次提交所做的改动说明。
    然后修改text文件,我这里输入仅 first line ,然后使用 git diff text 查看text文件的改动:

    text文件改动

    可以看到 first line 前面有个 + 号,表示新增加的内容,而对已提交的内容进行删除,使用 git diff 查看时就会显示 -

    这里,单单使用 git diff 仅仅只是查看已经修改但还没暂存的变化,而使用 git diff --cached 命令可以查看已经暂存的对比上次提交的变化

    再次使用git add text 将text文件的修改保存到暂存区(每次提交前都得先暂存,否则将会报 change not staged for commit ,并且提交失败, 但可以通过给commit 命令添加 -a 参数来跳过add步骤),然后进行提交 `git commit -m “add content first line “

  4. 使用.gitignore 文件来忽略不必要提交的文件,一下是 .gitignore文件的语法规则:

    1. 配置的都是忽略的文件: 例如*.class 表示忽略所有的class文件
    2. 忽略目录使用 /directory, 例如:/build 表示忽略build目录
  5. 撤销修改:

    1. 未暂存(执行add命令)的:直接使用 git checkout -- filename 进行撤销即可
    2. 已暂存的需要分两步:
      1. 先使用git reset HEAD filename 撤销暂存
      2. 然后再使用 git checkout -- filename 撤销修改
  6. 撤销提交:
    1. 撤销上一次的commit :git revert HEAD
    2. 撤销上上次的commit: git revert HEAD^
    3. 撤销特定的commit : git revert commit_id
  7. 查看提交记录:
    1. 查看所有提交记录:git log, 加 -p 参数可以显示每次提交所做的改动,注意这里和很多git命令一样,也可以通过文件名对单个文件进行操作,如: git log -p text 查看对text文件的提交的修改
    2. 查看最近n次提交记录: git log -n
    3. 查看某次提交记录: git log id 这里的id是指commit的id
  8. 移除文件:
    1. 移除跟踪(从暂存区移除)但不删除文件: git rm --cached filename
    2. 移除跟踪同时删除文件: git rm filename
  9. 分支
    1. 初始化后会自动创建一个master分支
    2. (从当前分支)创建新分支: git branch -b branchname
    3. 查看分支: git branch -a 带 * 的是当前正在编辑的分支
    4. 切换分支: git checkout branchname
    5. 合并分支,这里直接沿用上面的例子:
      1. 先新建分支branch2: git branch branch2
      2. 切换到branch2: git checkout branch2
      3. 在text文件中添加一行: second line
      4. 切换回master分支: git checkout master
      5. 现在将branch2 做的改动合并到master分支上:git merge branch2
    6. 删除分支: git branch -D branchname
  10. 与远程版本库协作

    1. 下载版本: git clone remote_repository_address remote_repository_address 是项目地址
    2. git remote origin 查看远程版本库origin的信息
    3. 提交本地版本库改动到远程版本库: git push origin master ( origin 是指远程版本库名称,master是指要提交的分支)
    4. 将远程版本库上的修改同步到本地:git fetch origin master
    5. 查看远程版本库所做改动(相对于指定分支,这里是master分支):git diff origin/master
    6. 合并到本地分支: git merge origin/master
    7. git pull origin master相当于fetch和merge一起执行
    8. 类似的,git push origin master 表示将本地修改推送到远程origin仓库的master分支
    9. 关联远程仓库(例如,本地有一个写好的项目,现在要与远程新建的仓库关联,好把本地仓库的内容推送到远程仓库), 是用 git remote add origin remote_repository_address , 其中,origin是Git中远程仓库的默认名字。
      这个过程其实还涉及Git的远程引用,假如推送到的远程分支是master,则会在生成 .git/refs/remote/origin/master 文件,origin代表远程仓库,master代表远程分支。
      这里还要注意,虽然可以通过checkout来切换远程分支,但是并不会改变HEAD 文件的引用值,远程引用时只读的。
  11. 标签功能
    一个标签实际是对应着一次commit,由于commit的id值不好记,标签就相当于给一次commit取一个好记的名字。

    创建标签: git tag tagname 如:git tag v1.0 创建了一个名字为 v1.0 的标签, 可以通过 -m 参数添加附加信息
    也可以指定某次commit 的id,直接在tagname后面:git tag tagname commit_id
    删除标签: git tag -d tagname

    列出所有标签: git tag
    将本地标签推送到远程仓库: git push origin -tags

    标签的用途:标签相当于一个快照,是不能像分支一样进行修改,但可以通过标签创建出一个分支: git checkout -b branchname tagname , 然后再对该分支进行编辑

  12. 储存分支工作现场
    我觉得这个才像是一个快照,可以把未提交的修改储存起来。
    使用:git stash
    储存后,使用 git status 查看状态,不会显示未提交的内容。可以从这里创建新的分支完成其他的工作。

    然后是恢复存储的修改:
    可以先使用 git stash list 列出所有的存储点。
    然后使用git stash apply stash_id 来进行恢复,而这个恢复操作是没有删除该存储点的,使用 git stash drop stash_id 进行删除。
    git stash pop 进行恢复并且删除。

    什么时候会用到呢,比如我在dev分支做了一些改动,但还没有完成工作,现在突然想到需要到master分支修改一个bug,那么这个时候就可以先存储dev分支的修改,再切换到master分支了。
    当然其实也不一定需要这么做。其实也可以直接新建一个git窗口使用master分支。。

主要参考(当然还有自己以前onenote上做的笔记):

https://git-scm.com/docs/gittutorial

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

原创粉丝点击