让Git不再难学

写在前面

在团队做过软件开发的,版本控制必是不可或缺的一项。目前,版本控制主要分为集中式版本控制系统和分布式版本控制系统 ,即大家熟知的SVN和Git。Git是当下最流行的分布式版本控制系统,故,今天,我们就来研究一下Git的神奇之处。

浅析SVN与Git的不同

  • 最基本:SVN是集中式,Git是分布式的。集中式,版本库集中存放在中央服务器,工作时,每个人需要先从中央服务器获取最新的版本,然后在属于自己的分支下工作,完成工作后,再提交到中央服务器;分布式,每一个电脑都是一个完整的版本库,可以减少中央服务器挂掉所带来的严重后果。也可以这样理解,Git相当于SVN服务端和客户端的集合;
  • 联网需求不同:Git中,不必联网就能看到版本迭代的信息和创建分支,而,SVN需要在联网的情况下才能满足上述要求;
  • 分支管理难易程度不同:在SVN中,分支作为版本库中一个目录,若需要查看是否合并,还需要运行svn propget svn:mergeinfo指令;而在Git中,可以快速在几个分支中切换和快速合并;
  • 存储方式不同:SVN是按文件存储,Git是按元数据方式存储;
  • 权限问题:在SVN中,可以设定每个账号的权限,比如只读、读写权限等,而Git就没有相应的权限控制。这也许就是一些公司至今仍保留SVN的原因吧。
  • 汇总:工具总有其侧重点,没有好与坏,只有各取所需。

安装Git

  • 第一种方法:安装Git图形管理工具——SourceTree,不必记那么多命令,了解基本流程就可以放心使用了,下载点这;
  • 第二种方法:在Mac上安装Git,可通过HomeBrew安装,具体方法请参考HomeBrew的文档;
  • 补充其他平台的安装方法,请参考这
  • 如果大家对Mac终端的命令还不太了解的话,可以参考我的上篇文章:学好Mac常用命令,助力iOS开发

Git的使用

有两种Git的使用方法,一种是通过终端命令控制,另一种是使用Git的图形管理工具——SourceTree。具体两者哪一种更好用,更有效率,那还得因人而异。笔者下面将会分别介绍这两种方法的基本操作,希望读者能边读边动手操作一下,受益匪浅。

一.命令下的Git
1.创建版本库:
  • 首先,选择一个合适的地方,创建一个空目录:

    Mac-Pro:~ kys-1$ mkdir gitTest
    Mac-Pro:~ kys-1$ cd gitTest

    或者直接在相应目录下,自己手动创建一个文件夹;

  • 其次,在终端上输入git init命令,如下:

    Mac-Pro:~ kys-1$ cd /Users/kys-1/Desktop/gitTest
    Mac-Pro:gitTest kys-1$ git init
    Initialized empty Git repository in /Users/kys-1/Desktop/gitTest/.git/

    这样,一个本地仓库就顺利地建好了。

  • 最后,每创建一个仓库时,当前目录都会多一个.git目录,若是没有看到,只需要使用ls -ah命令即可:

    Mac-Pro:gitTest kys-1$ ls -ah
    .        ..        .DS_Store    .git

    很清楚可以看到,笔者的当前目录有两个隐藏的。

2.添加文件到版本库
  • 首先,创建一个GitTest.md文件,内容如下:

    git is a strong software
    Let‘s start with a good mood!

    将该文件放到仓库gitTest所在的目录下;

  • 其次,使用git add命令添加文件,如下:

    Mac-Pro:gitTest kys-1$ git add GitTest.md

    然后执行,如果不显示任何信息,那就是运行无误;

  • 最后,使用命令git commit将文件提交到仓库,如下:

      Mac-Pro:gitTest kys-1$ git commit -m "wrote a README"
      [master (root-commit) dfaeb43] wrote a README
         1 file changed, 1 insertion(+)
         create mode 100644 GitTest.md

    其中,-m后面输入的是本次提交的详细信息,比如,完成了哪个功能或者修复了哪个bug。

3.查看仓库状态
  • 首先,先对提交的GitTest.md中的信息进行修改,然后运行git status,效果如下:

    Mac-Pro:gitTest kys-1$ git status
    On branch master
     Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
     (use "git checkout -- <file>..." to discard changes in working  directory)
    
        modified:   GitTest.md
    
    no changes added to commit (use "git add" and/or "git commit -a")
4.查看修改内容
  • 使用命令git diff可以查看具体修改了哪些内容,如下:

    Mac-Pro:gitTest kys-1$ git diff
    diff --git a/GitTest.md b/GitTest.md
    index 00ad777..64590e1 100644
    --- a/GitTest.md
    +++ b/GitTest.md
    @@ -1 +1,2 @@
    -git is a strong software
    \ No newline at end of file
    +git is a strong software
    +Let‘s start with a good mood!
    \ No newline at end of file
5.版本回退
  • 首先,使用git log命令查看历史记录,如下:

    Mac-Pro:gitTest kys-1$ git log
    //版本一
    commit 988f92f1f5cf959d491ad63462e0c90372bb4b0b
    Author: XiaolinSun <[email protected]>
    Date:   Fri Apr 8 11:15:08 2016 +0800
    
        add new
    //版本二
    commit dfaeb438504942d09e7f4282bd93b560d2ee68e2
    Author: XiaolinSun <[email protected]>
    Date:   Fri Apr 8 11:12:02 2016 +0800
    
      wrote a README
    Mac-Pro:gitTest kys-1$ git reset --hard HEAD^
    HEAD is now at dfaeb43 wrote a README
    Mac-Pro:gitTest kys-1$ git log
     //版本三
    commit dfaeb438504942d09e7f4282bd93b560d2ee68e2
    Author: XiaolinSun <[email protected]>
    Date:   Fri Apr 8 11:12:02 2016 +0800
    
      wrote a README

    很清晰,共有三次提交历史。其中,988f92f1f5cf959d491ad63462e0c90372bb4b0b这样一串字符表示提交的版本号commit id

  • 使用git reset命令可以回退到上一个版本,输入git reset --hard commit id,如下:
    Mac-Pro:gitTest kys-1$ git reset --hard 988f92f
    HEAD is now at 988f92f add new
  • 如果开发过程中,一不小心,回退错了地方,可以使用git reflog命令查看命令历史,如下:
    Mac-Pro:gitTest kys-1$ git reflog
    dfaeb43 [email protected]{0}: reset: moving to HEAD^
    988f92f [email protected]{1}: commit: add new
    dfaeb43 [email protected]{2}: commit (initial): wrote a README

    从而,可以选择要回到的那个版本即可。

6.工作区与暂存区
  • 工作区:上几步中在电脑创建的文件目录就是工作区,如下图:

  • 版本库就是隐藏目录.git;
  • 添加文件时,首先,用git add把文件添加进去,实际上是把文件修改添加到暂存区;然后,用git commit提交更改,是把暂存区的内容提交到当前分支;最后,每次文件修改后,如果不add到暂存区,那是不会加入到commit
7.撤销修改
  • 当你修改文件GitTest.md时,在你准备提交前,忽然发现一个错误,如图:

    git is a strong software
    Let‘s start with a good mood!
    Start up now!
    Fight for future! //新添加的内容

    这时候,必须要查看一下状态:输入git status,如下:

     Mac-Pro:gitTest kys-1$ git status
      On branch master
      Changes not staged for commit:
        (use "git add <file>..." to update what will be committed)
        (use "git checkout -- <file>..." to discard changes in working directory)
    
      modified:   GitTest.md
    
    no changes added to commit (use "git add" and/or "git commit -a")
  • 使用git checkout -- file命令就会丢弃工作区的修改,如下:

    Mac-Pro:gitTest kys-1$ git checkout -- GitTest.md

    然后再查看工作区的内容:

    git is a strong software
    Let‘s start with a good mood!
    Start up now!

    这个时候内容就恢复了。

8.删除文件
  • 使用git rm`git commit命令就可以从版本库删除相应的文件,例如:我们新建一个newFile.md文件,然后将其加入工作区,如下所示:

    Mac-Pro:gitTest kys-1$ git add newFile.md
    Mac-Pro:gitTest kys-1$ git commit -m "add newFile"
    [master e278be1] add newFile
     1 file changed, 1 insertion(+)
     create mode 100644 newFile.md
    Mac-Pro:gitTest kys-1$ git rm newFile.md
    rm ‘newFile.md‘
    Mac-Pro:gitTest kys-1$ git commit -m "delete newFile"
    [master 9c28795] delete newFile
     1 file changed, 1 deletion(-)
     delete mode 100644 newFile.md

    执行完这些命令后,文件就从版本库中删除了。

小结一下

以上操作都是在本地仓库进行的一些操作,如果感觉上面讲的有些许啰嗦,那么只需记住下面几个命令即可:

1.git init      -------创建空的版本库;
2.git add       -------添加文件到暂存区;
3.git commit      -------提交文件到版本库(仓库);
4.git status      -------查看相关状态;
5.git diff      -------查看具体修改的内容;
6.git log      -------查看提交历史记录;
7.git reset      -------回到上一版本;
8.git reflog      -------查看命令历史记录;
9.git checkout      -------丢弃工作区的修改;
10.git rm      -------删除文件;
二.SourceTree的使用
  • 使用SourceTree客户端来执行上述与本地仓库相关的操作。
  • 安装并打开SourceTree:

SourceTree

  • 选择本地按钮,后点击新仓库,选择创建本地仓库,填入自己的地址,点击创建就OK了(是不是很方便?):

创建流程1

创建流程2

  • 我先创建一个名字TTest本地仓库,演示一下后面的相关操作,点击新建仓库的导航条:

    点击

仓库状态

  • 在工作区添加文件README.md

显示未暂存文件

已暂存

解释一下,已暂存就是相当于git add操作。

  • 提交操作,对比git commit -m "add new info"命令:

    提交

提交后

  • 查看具体内容修改、查看相关状态都可以直接看到,就不在一一赘述了;
  • 回到上一版本可以回滚操作,选择具体的提交记录,点击右键,选择提交回滚即可;
  • 对比一下,发现SourceTree是如此的方便快捷!
远程仓库
  • 概念:远程仓库可以用一台电脑当做服务器,团队其他成员可以从这个服务器克隆一份完整过程到自己的本地仓库,同时,可以将完成的部分推送到远程仓库,以实现项目的跟进。由于是演示,咱就暂且使用现成的远程仓库——Github;
  • 作为开发人员,github账号是必备的,如果还没有,那就得立即注册一个。
  • 创建SSH Key,因为本地的Git仓库与Github远程仓库之间是通过SSH加密的。首先,需要到主目录上查看是否有.ssh目录,再查看.ssh目录下有没有id_rsaid_rsa.pub文件,如下,

    查找.ssh目录

发现没有上述的两个文件,这时需要创建:

 Mac-Pro:~ kys-1 $ ssh-keygen -t rsa -C "[email protected]"

需要将邮件地址换成自己的地址,如下:

Mac-Pro:~ kys-1$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/kys-1/.ssh/id_rsa):
Created directory ‘/Users/kys-1/.ssh‘.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/kys-1/.ssh/id_rsa.
Your public key has been saved in /Users/kys-1/.ssh/id_rsa.pub.

出现上述描述,就证明你成功了,然后到主目录下找到.ssh目录,查看id_rsaid_rsa.pub文件,id_rsa是私钥,需要自己保留好,id_rsa.pub是公钥,别人知道也无妨。

  • 登录Github账户,打开Account settingsSSH Keys页面,添加id_rsa.pub文件的内容:

    添加公钥

  • 添加SSH key的作用,是保证推送到远程仓库的提交确实是你提交的而不是别人代替,以确保项目被他人修改;
  • 添加远程库:首先登陆github账号,点击“New repository ”按钮,创建新仓库,如下:

    New repository

填写信息

需要填写仓库名,描述以及是否勾选创建初始化文件等。

  • 在本地仓库下运行命令:
 Mac-Pro:~ kys-1$ git remote add origin yourGitAddress

然后,将本地库的所有内容推送到远程库:

Mac-Pro:~ kys-1$ git push -u origin master

到这一步,只要本地作了提交。就可以通过命令:

Mac-Pro:~ kys-1$ git push origin master

把本地master分支的最新修改推送到GitHub上去。

  • 使用git clone命令将远程库克隆到本地:
Mac-Pro:~ kys-1$ git clone yourLocalGitAddress1
  • 在SourceTree下克隆远程仓库到本地的操作:

操作流程

源URL就是远程仓库的地址,目标路径是本地存储的路径。

创建与合并分支(与SourceTree同步对照)
  • 概念:创建分支的目的是让你的工作变得更灵活更有效率,当你开发新功能时,你创建了一个分支,你可以在在原来分支继续工作,也可以在新建的分支上工作,两者之间不会干预,当你完成了新功能,只需将新分支合并到原来分支上即可。最吸引人的是Git创建和切换分支是非常速度的。
  • 创建dev分支,然后切换到dev分支,使用git checkout命令:
    Mac-Pro:gitTest kys-1$ git checkout -b dev
    Switched to a new branch ‘dev‘

    -b参数表示创建并切换.

  • 使用git branch命令查看当前分支:
    Mac-Pro:gitTest kys-1$ git branch
      * dev
      master
  • SourceTree操作:

    选择分支按钮

创建分支

切换到dev分支

  • 我们在dev分支进行操作,修改README.md 文件内容然后提交:

    Mac-Pro:gitTest kys-1$ git add README.md
    Mac-Pro:gitTest kys-1$ git commit -m "dev branch"
    [dev 9be4a38] dev branch
     1 file changed, 2 insertions(+), 1 deletion(-)
  • SourceTree操作:

提交

提交后

  • dev分支工作结束,切换到master分支,

    Mac-Pro:gitTest kys-1$ git checkout master
    Switched to branch ‘master‘
    Your branch is up-to-date with ‘origin/master‘.
  • SourceTree操作:

切换到master分支

点击右键,选择检出master分支即可。

检出成功

  • 使用git merge 指令把dev分支的工作成果合并到master分支上:

    Mac-Pro:gitTest kys-1$ git merge dev
    Updating 2269ea8..9be4a38
        Fast-forward
       README.md | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
  • SourceTree操作:选中dev分支,右击选择合并dev至master即可,

合并后

  • 使用git branch -d dev命令删除dev分支:

    Mac-Pro:gitTest kys-1$ git branch -d dev
    Deleted branch dev (was 9be4a38).
  • SourceTree操作:选中dev分支,右击选择删除dev即可。
小结一下
  查看分支:git branch
  创建分支:git branch <name>
  切换分支:git checkout <name>
  创建+切换分支:git checkout -b <name>
  合并某分支到当前分支:git merge <name>
  删除分支:git branch -d <name>
冲突解决
  • 制造冲突:先创建一个新的分子conflict,并在新分支上工作,修改README.md内容,操作如下:

    Mac-Pro:gitTest kys-1$ git checkout -b conflict
    Switched to a new branch ‘conflict‘
    Mac-Pro:gitTest kys-1$ git add README.md
    Mac-Pro:gitTest kys-1$ git commit -m "make a conflict"
    [conflict 1bc6611] make a conflict
     1 file changed, 2 insertions(+), 1 deletion(-)

SourceTree显示状态

  • 切换到master,继续修改README.md内容,并提交修改:

    Mac-Pro:gitTest kys-1$ git checkout master
    Switched to branch ‘master‘
     Your branch is up-to-date with ‘origin/master‘.
    Mac-Pro:gitTest kys-1$ git add README.md
    Mac-Pro:gitTest kys-1$ git commit -m "add two conflicts"
    [master f43d5d1] add two conflicts
     1 file changed, 2 insertions(+), 1 deletion(-)
  • 合并分支,就会出现冲突:
    Mac-Pro:gitTest kys-1$ git merge conflict
    Auto-merging README.md
    CONFLICT (content): Merge conflict in README.md
    Automatic merge failed; fix conflicts and then commit the result.
    Mac-Pro:gitTest kys-1$ git status
    On branch master
    Your branch is ahead of ‘origin/master‘ by 1 commit.
    (use "git push" to publish your local commits)
    You have unmerged paths.
    (fix conflicts and run "git commit")
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
    
      both modified:   README.md
    
    no changes added to commit (use "git add" and/or "git commit -a")
  • 查看文件README.md就能看到冲突信息的提示了,红色标记的内容就是用来标注不同分支的内容:

冲突信息

  • 将内容改为以下内容就行了,然后重新提交就可以了。

    We will make a conflict!

    Mac-Pro:gitTest kys-1$ git add README.md
    Mac-Pro:gitTest kys-1$ git commit -m "comflict fixed"
    [master dad373b] comflict fixed

SourceTree的内容

  • 使用git log --graph可以看到分支合并图;
  • 小憩一下:做到这一步是不是感觉自己好有成就感啊,下面的内容更精彩,继续...
分支管理策略
  • 上述合并分支,一大部分是在用Fast forward模式,这种模式又优点也有缺点,就是删除分支后会丢掉分支信息,这时,我们需要使用一下普通模式,即使用带有--no-ffgit merge,继续上述流程:新建分支dev->修改提交->切换分支->合并分支:

    Mac-Pro:gitTest kys-1$ git checkout -b dev  //***
    Switched to a new branch ‘dev‘
    Mac-Pro:gitTest kys-1$ git add README.md //***
    Mac-Pro:gitTest kys-1$ git commit -m "add new content" //***
    [dev 97676b7] add new content
     1 file changed, 1 insertion(+)
    Mac-Pro:gitTest kys-1$ git checkout master  //***
    Switched to branch ‘master‘
    Your branch is up-to-date with ‘origin/master‘.
    Mac-Pro:gitTest kys-1$ git merge --no-ff -m"merge with --no-ff"  dev   //***
    Merge made by the ‘recursive‘ strategy.
     README.md | 1 +
     1 file changed, 1 insertion(+)
  • 当然你也可以使用git log --graph --pretty=oneline --abbrev-commit命令查看分支历史:

截图

分支情况

  • 补充几点:首先,在实践开发中,master分支是非常稳定的,仅用来发布新版本,但不在上面开发;其次,创建dev分支开发,等到版本发布的时候在合并到master分支即可;团队中每个人都有自己的分支,及时合并即可。
添加Bug分支
  • 前述:修复Bug在所难免,修复Bug可以通过创建一个新的临时分支修复,合并分支,删除临时分支。
  • 情形:当你在dev分支上工作还没有完成,正赶上有Bug需要修复,这时你需要将手头上工作暂存一下,抓紧时间修复Bug;
    Mac-Pro:gitTest kys-1$ git status
      On branch dev
      Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
        (use "git checkout -- <file>..." to discard changes in working   directory)
    
      modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

  • 使用git stash暂存当前工作区:

    Mac-Pro:gitTest kys-1$ git stash
    Saved working directory and index state WIP on dev: 40be6d0   merge with --no-ff
    HEAD is now at 40be6d0 merge with --no-ff
  • 使用SourceTree操作:

暂存

  • 这时,可以git status查看工作区,并可以创建Bug分支了;
  • 确定好在master分支修复Bug:

    Mac-Pro:gitTest kys-1$ git checkout master
    Switched to branch ‘master‘
    Your branch is up-to-date with ‘origin/master‘.
    Mac-Pro:gitTest kys-1$ git checkout -b bug
    Switched to a new branch ‘bug‘
    Mac-Pro:gitTest kys-1$ git add README.md
    Mac-Pro:gitTest kys-1$ git commit -m "fix bug"
      [bug 2c013d1] fix bug
     1 file changed, 1 insertion(+), 1 deletion(-)

创建bug分支

  • bug分支上修复完bug提交,就可以合并删除bug分支,如下:

     Mac-Pro:gitTest kys-1$ git checkout master
     Switched to branch ‘master‘
     Your branch is up-to-date with ‘origin/master‘.
     Mac-Pro:gitTest kys-1$ git merge --no-ff -m "merge bug" bug
     Merge made by the ‘recursive‘ strategy.
    README.md | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)
     Mac-Pro:gitTest kys-1$ git branch -d bug
     Deleted branch bug (was 2c013d1).
  • SourceTree操作:

合并分支

bug修复完成

  • Bug修复完,我们需要将暂存区的分支拿出来了,切换到dev分支,使用git stash list命令查看:

    Mac-Pro:gitTest kys-1$ git stash list
    [email protected]{0}: WIP on dev: 40be6d0 merge with --no-ff

    工作区还在,可以使用两个命令恢复:一个是git stash apply(恢复后,stash内容不删除)还需用git stash drop删除;另一个是使用git stash pop恢复的同时将stash内容也删除了:

    Mac-Pro:gitTest kys-1$ git stash pop
      On branch dev
      Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working   directory)
    
      modified:   README.md
    
    no changes added to commit (use "git add" and/or "git commit -a")
  • SourceTree操作:

暂存区恢复

Feature分支
  • 开发过程中,每需要开发一个新功能都需要添加一个分支,最后合并删除,流程同上述bug分支相同,不再赘述。
  • 强行删除分支,例如:你在新的分支下开发功能,后期开会取消这个功能,你只能将这个分支上的内容全强制删除,如下:

    Mac-Pro:gitTest kys-1$ git branch -d feature
     error: The branch ‘feature‘ is not fully merged.
    If you are sure you want to delete it, run ‘git branch -D feature‘.

    接下来使用git branch -D feature命令强制删除:

    Mac-Pro:gitTest kys-1$ git branch -D feature
    Deleted branch feature (was 5f7e86c).
  • SourceTree操作:

正常删除提示

强制删除

标签管理
  • 作用:标签作为版本库的快照,能够在需要的时候很快找到对应的版本库;
  • 在指定提交节点上添加标签,默认的标签是打在最新提交的节点上的,使用git tag命令添加标签,使用git show命令查看标签信息:
    Mac-Pro:gitTest kys-1$ git tag V1.0  //***
    Mac-Pro:gitTest kys-1$ git tag    //***
      V1.0
    Mac-Pro:gitTest kys-1$ git show V1.0  //***
    commit d0fc2232015ae6737273fa5e94310bcfd4ef231c
    Author:  <[email protected]>
    Date:   Wed Apr 13 07:45:48 2016 +0800
    
      add a tag
    
    diff --git a/README.md b/README.md
    index 9082c3c..52ef851 100644
    --- a/README.md
    +++ b/README.md
    @@ -9,4 +9,4 @@ Try a new way!
     Try doing a different thing!
     Try again!
     I am developing!!!
    -
    +I want to make a tag!
  • SourceTree操作:

创建标签

标签显示

打开标签

  • 使用git tag -d <tagname>命令删除本地标签,使用git push origin <tagname>命令可以推送一个本地标签,使用git push origin --tags命令可以推送全部未推送过的本地标签,使用git push origin :refs/tags/<tagname>命令可以删除一个远程标签,操作如下:

    Mac-Pro:gitTest kys-1$ git tag -d V1.0
    Deleted tag ‘V1.0‘ (was 6462641)

    推送标签到远程:

    Mac-Pro:gitTest kys-1$ git push origin V1.0  //***
    Counting objects: 5, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (5/5), 497 bytes | 0 bytes/s, done.
    Total 5 (delta 2), reused 0 (delta 0)
    To https://github.com/123sunxiaolin/gitTest.git
     * [new tag]         V1.0 -> V1.0

    推送本地未推送的标签:

    Mac-Pro:gitTest kys-1$ git push origin --tags  //***
     Counting objects: 1, done.
     Writing objects: 100% (1/1), 154 bytes | 0 bytes/s, done.
     Total 1 (delta 0), reused 0 (delta 0)
    To https://github.com/123sunxiaolin/gitTest.git
     * [new tag]         V0.1 -> V0.1

    删除已推送的标签,首先,删除本地的标签,其次,删除远程的标签:

    Mac-Pro:gitTest kys-1$ git tag -d V0.1  //***
    Deleted tag ‘V0.1‘ (was 98817ff)
    Mac-Pro:gitTest kys-1$ git push origin :refs/tags/V0.1  //***
    To https://github.com/123sunxiaolin/gitTest.git
     - [deleted]         V0.1
  • SourceTree操作:点击标签,右击选择删除即可,勾选删除所有远程标签可以删除远程标签,操作非常直观:

删除本地标签

忽略特殊文件
  • 在Git工作目录下,有一些配置文件我们不想提交到远程仓库,这时我们可以使用Git提供的.gitignore文件;
  • 忽略文件的原则是:忽略操作系统自动生成的文件,比如缩略图等,
    忽略编译生成的中间文件、可执行文件等,忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
  • 首先,在Git目录下,使用git touch .gitignore创建. gitignore文件,然后编辑:

    Mac-Pro:gitTest kys-1$ touch .gitignore
    Mac-Pro:gitTest kys-1$ ls -ah
    .        .DS_Store    .gitignore
    ..        .git        README.md

忽略文件

  • 如果你对配置文件还不甚了解,就看一下现成配置列表;
  • 常用规则:

/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件

gitignore还可以指定要将哪些文件添加到版本管理中,只是在文件前加一个!即可:

!*.zip
!/mtk/one.txt

其中,!/mtk/one.txt只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,说到这想必大家都明白了。

唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。

  • 最后一步就是将. gitignore文件推送到远程仓库即可。
写在最后
  • 在开发过程中,很多人纠结版本管理使用Git命令好呢,还是SourceTree客户端好呢,其实这没有明确的答案,完全取决于自己来,可以说两种方式各有利弊,大家可以尝试两者结合使用,效果应该会更好。
  • 写到这,终于可以舒一口气了,最后,附上自己写文章时的截图,希望大家给点掌声以资鼓励。

时间: 2024-10-31 15:35:10

让Git不再难学的相关文章

让java不再难学,架构师的必经之路,月入10万不再是梦

Java架构师主要需要做哪些工作呢? 1.负责设计和搭建软件系统架构(平台.数据库.接口和应用架构等),解决开发中各种系统架构问题. 2.优化现有系统的性能,解决软件系统平台关键技术问题攻关.核心功能模块设计.核心代码开发. 3.在项目需求不断细化的工程中校正整体的架构设计,以及详细模块拆分设计. 4.营造技术学习氛围,带领团队不断完善开发开发方法及流程,提升开发效率与质量,加强技术标准及规范. 5.带领团队攻克例如大数据量.高并发.高稳定性等带来的各种挑战及技术难关. 6.责任心强,有团队合作

从此编写 Bash 脚本不再难【转】

从此编写 Bash 脚本不再难 原创 Linux技术 2017-05-02 14:30 在这篇文章中,我们会介绍如何通过使用 bash-support vim 插件将 Vim 编辑器安装和配置 为一个编写 Bash 脚本的 IDE. -- Aaron Kili 本文导航 -什么是 bash-support.vim 插件? …… 05% -如何在 Linux 中安装 Bash-support 插件 …… 10% -如何在 Vim 编辑器中使用 Bash-support 插件 …… 17% -如何为

C++ 难学吗

这是针对初学者的一篇文章,首先强调的是,学C++时最好先学一下C,C++是C的升级和扩展. 学会C,在学C++就会容易很多,当然不一定,也有很多人直接学了C++,学了C++就包括C了. C++ 难学吗? 这个要看个人的毅力,如果没毅力,再简单的东西对你来说都是难的. 我从没有接触过编程新手的角度出发,把入门的第一章的内容,尽量简单化,方便新手入门. 学C++ 要多久 入门 几个月,要学好,要几年.这是事实,不然C++的月薪怎么会那么高.在国内找到C++高手 不好找的.国内大部分C++高手都去开发

5月17日云栖精选夜读:分布式大数据系统巧实现,全局数据调度管理不再难

本文从背景.分布式文件系统.容错机制.分布式节点距离计算法则.数据分布策略.分布式计算调度.跨IDC集群规划的两种方式.ODPS跨集群数据依赖等方面深度介绍了分布式大数据系统中全局数据调度和管理. 大数据技能 分布式大数据系统巧实现,全局数据调度管理不再难 作者:大数据史记 大规模数据的分布式机器学习平台 作者:大数据史记 重磅,企业实施大数据的路径 作者:王二辉   发表在:大数据文摘 知识整理 PHP异步的玩法 作者:sibenx Java 异常处理 作者:秦关古月 Php开发ZendStu

有人说,越低级的程序越难学,越高级的程序越容易学?

学Python是不是很难?是不是越低级的程序越难学,越高级的程序越容易学呢? 仔细分析一下,Python编程一句话:写起来快,看起来明白. 随着编程越来越普及,连小学生的教材里,也有了Python入门的课程,可见人工智能时代学会一门编程语言有多么重要. 所以,表面上来看,越高级的程序越容易学. 但是,如果要学习高级Python编程语言,还是比较难的,这也很正常,如果所有的程序学习起来都那么简单,那人间岂不是到处都是程序员了,Python程序员的薪资水平也不会一路看涨了.那么如果是小白,要学习Py

学了这四招,维护领导形象不再难

最近,架构师米洛整理出了很多有关团队管理的文章,慢慢发. 如果你加了薪升了职,恭喜你开始了一个新的征程.新领导首先就要面对的一个问题是:自己是领导了,该担负什么职责,有什么责任?如何维护自己的领导形象?好吧,米洛就跟你谈一谈. 第一,要学会尊重下属.但这并不是说要降低自己的地位来迎合老员工,有的年轻上司在老员工面前放下身段,还以"哥""姐"相称,这样是不能树立威严的.有的新上司不理会资深员工的心理感受,大步推进新的管理措施,如果老员工不能跟上,就淘汰掉,这些管理方式

掌握下面常用函数,学php不再难

一.写入文件 1.打开资源(文件)fopen($filename,$mode) 2.写文件fwrite($handle,$str) 3.关闭文件fclose($handle) 4.一步写入file_put_contents($filename,$str,$mode) FILE_APPEND LOCK_EX } 二.读文件 1.读文件fread($handle,字节数) 2.读一行fgets($handle); 3.读一个字符fgetc($handle) 4.读成一个数组中file($filena

掌握下面常用函数,学PHP不再难!

一.写入文件1.打开资源(文件)fopen($filename,$mode)2.写文件fwrite($handle,$str)3.关闭文件fclose($handle)4.一步写入file_put_contents($filename,$str,$mode) FILE_APPEND LOCK_EX} 二.读文件1.读文件fread($handle,字节数) 2.读一行fgets($handle);3.读一个字符fgetc($handle)4.读成一个数组中file($filename)5.一步读

关于git自己所学到的东西

1.什么是Git(傻瓜内容跟踪器) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 Git 是 Linus Torvalds (Linus在1991年创建了开源的Linux)为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. 2.Git发展的历史: 1.在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!(因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但