Git 基础命令巧妙理解

参考作品

Table of Contents

1.GIT结构:

​2.初始化一个Git仓库

3.工作区(working area)

4.暂存区(stage):

5.本地仓库与github仓库:

6.分支:

1>dev使用分支:    

2>Bug分支:  --- 提供了一个stash功能

3>Feature分支:

7.Rebase:

8.标签:

1>创建标签:

2>操作标签

9.自定义Git:

10.配置:

1>配置别名:

2>配置文件:

11.搭建Git服务器:


1.GIT结构:

    GIT一般分为工作区、暂存区、本地仓库和远端分支:

  • 工作区、暂存区、本地仓库在本地计算机上。
  • 工作区:本地电脑上的文件夹
  • 暂存区:工作区有一个隐藏目录 .git(这是git的版本库),里面含:stage的暂存区,git为我们创建的第一个分支master以及指向master的一个指针HEAD


2.初始化一个Git仓库

    mkdir git_repo
    git init    

3.工作区(working area)

    git status                          随时掌握工作区的状态
    git add <filename>          添加到暂存区的stage
    git commit -m <message>     添加到暂存区的master
    git diff <filename>            可以查看修改内容(如果git status告诉你有文件被修改过)
    git checkout -- file            把file文件在工作区的修改全部撤销.其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
    git rm file                           从版本库中删除该文件

4.暂存区(stage):

    git log                               查看提交历史,以便确定要回到过去
    git reflog                           查看命令历史,以便确定要回到未来
    git reset --hard commit_id  历史之间穿梭,HEAD指向的版本就是当前版本
    git reset --hard HEAD^       回退到上一个版本

5.本地仓库与github仓库:

    git remote                      查看远程库的信息
    git remote -v                  显示更详细远程库的信息
    git remote add origin [email protected]:myname/learngit.git
                                           把一个已有的本地仓库与github仓库关联添加后,远程库的名字就是origin,这是Git默认的叫法
    git remote rm origin      删除已有的GitHub远程库
    git push -u origin master 把本地库的所有内容推送到远程库上,由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    git clone                               克隆  
    git push origin master        推送分支,就是把该分支上的所有本地提交推送到远程库,推送时,要指定本地分支
    git push origin branch-name   推送其他分支
    git pull                                 抓取远程的新提交

6.分支:

并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
    master分支是主分支,因此要时刻与远程同步;
    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

1>dev使用分支:    

        git branch                           查看分支
        git branch <name>           创建分支
        git checkout <name>       切换分支
        git checkout -b <name>   创建+切换分支
        git merge <name>            合并某分支到当前分支 1.Fast-forward 2.Auto-merge 3.the 'recursive' strategy 4.
        git merge --no-ff -m "merge with no-ff" dev  --no-ff用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并看不出来曾经做过合并。
        git branch -d <name>      删除分支
        git log --graph                   查看到分支合并图
        git log --graph --pretty=oneline --abbrev-commit 查看到分支合并图   
        git push origin branch-name   推送分支   
        git push origin branch-name   抓取分支  
        git checkout -b dev origin/dev 创建本地dev分支, 小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地
        git branch --set-upstream branch-name origin/branch-name  建立本地分支和远程分支的关联
    多人协作的工作模式通常是这样:
        首先,可以试图用git push origin <branch-name>推送自己的修改;
        如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
        如果合并有冲突,则解决冲突,并在本地提交;
        没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
    ps:如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

2>Bug分支:  --- 提供了一个stash功能

    git stash                          把当前工作现场“储藏”起来,等以后恢复现场后继续工作.
    git stash list                    查看stash储藏内容
    git stash apply               恢复,但是恢复后,stash内容并不删除
    git stash apply stash@{0} 恢复指定的stash
    git stash drop                删除stash内容
    git stash pop                 恢复+删除stash内容

3>Feature分支:

    每添加一个新功能,最好新建一个feature分支
    开发一个新feature,最好新建一个分支;
    如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

7.Rebase:

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

8.标签:

1>创建标签:

    git tag <tagname>               用于新建一个标签,默认为HEAD
    git tag <tagname> <commit_id>   用于新建一个标签,指定一个commit id
    git tag -a <tagname> -m "tag information"    可以指定标签信息,默认为HEAD
    git tag -a <tagname> -m "tag information" commit id    可以指定标签信息,指定一个commit id
    git tag                              查看所有标签。PS:标签不是按时间顺序列出,而是按字母排序的。
    git show <tagname>                   查看标签信息
PS: 标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

2>操作标签

    git tag -d <tagname>可以删除一个本地标签;
    git push origin <tagname>可以推送一个本地标签;
    git push origin --tags可以推送全部未推送过的本地标签;
    git push origin :refs/tags/<tagname>可以删除一个远程标签。PS:先删除本地标签

9.自定义Git:

    git config --global color.ui true   Git显示颜色,会让命令输出看起来更醒目
    在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
    忽略文件的原则是:
    忽略操作系统自动生成的文件,比如缩略图等;
    忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
    忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
    忽略某些文件时,需要编写.gitignore;
    .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
    git add -f App.class   如果你确实想添加该文件,可以用-f强制添加到Git:

10.配置:

1>配置别名:

    git config --global alias.st status   告诉Git,以后st就表示status
    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.br branch
    git config --global alias.last 'log -1'   配置一个git last,让其显示最后一次提交信息
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"     甚至还有人丧心病狂地把lg配置成

2>配置文件:

    1.每个仓库的Git配置文件都放在.git/config文件中
    2.当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

11.搭建Git服务器:

    sudo apt-get install git    安装git
    sudo adduser git            创建一个git用户,用来运行git服务

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章