Git教程学习笔记和填坑总结 以及 SourceTree 工具的使用

12 篇文章 1 订阅
6 篇文章 2 订阅

写这篇学习教程的原因是因为我之前一直对 Git 的理解很浅,只会对一些简单常用的命令进行操作,一旦出现问题就只能百度,这也一直令我很头疼。所以趁着这段时间,打算由浅入深的学习一下Git教程,主要参考资料为廖雪峰的Git教程。

这里有最新烫手的 Git 命令大全 哦~

一、Git 的安装与配置

  1. 通过git官网直接下载安装:git官网下载 ,下载对应的版本,默认安装即可。
  2. 安装完成,在开始菜单 -> Git -> Git Bash,打开一个命令行窗口即安装成功;或者桌面鼠标右键 -> Git Bash Here,同样打开一个命令行窗口。
  3. 配置你的用户名与Email地址:
    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    
    注意:git config命令的--global参数,表示这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

二、创建仓库(版本库)

  1. 创建一个空目录

    $ mkdir learnGit  # 创建目录
    $ cd learnGit     # 进入该目录
    $ pwd			  # 显示当前目录
    /c/Users/jingx/Desktop/learnGit
    
  2. 使用git init命令把这个目录变成Git仓库

    $ git init
    Initialized empty Git repository in C:/Users/jingx/Desktop/learnGit/.git/
    
  3. 把文件添加到版本库
    (1)在learnGit目录下新建一个readme.txt文件,文件内容可自定义。
    (2)用命令 git add 将文件添加到仓库(把文件修改添加到暂存区)

    $ git add readme.txt
    

    注:git add 可反复多次使用,添加多个文件;也可通过 git add . 命令,提交所有文件。

    (3)用命令 git commit 将文件提交到仓库(把暂存区的所有内容提交到当前分支)

    $ git commit -m "wrote a readme file"  # -m后面输入的是本次提交的说明
    # git commit提交成功的反馈内容
    [master (root-commit) eaadf4e] wrote a readme file
     1 file changed, 2 insertions(+)
     create mode 100644 readme.txt
    

三、版本管理

git log 命令查看之前的提交日志,后面加上参数 --pretty=oneline 显示简略信息。

$ git log  # 查看全部提交日志 => commit、Author、Date、提交内容
$ git log --pretty=oneline  # 查看简略版日志 => commit版本号

git log 后,输入字母 Q 即可退出。

git status 命令查看当前工作区的状态。

版本回退

使用命令 git reset 实现版本回退,HEAD表示当前版本,上一个版本就是HEAD^

# 回退到上一个版本
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed

再次查看对应内容,发现文件被还原了。
如果想要找回刚才被还原的最新版本,只要命令行窗口没有关闭,就可以往上翻找,找到那个commit id,就可以回到指定的版本了。

# 比如我最新版本的commit id 为 1094a...
$ git reset --hard 1094a

命令 git reflog 用来记录每一次命令,可以使用它来查看之前的命令。

工作区和暂存区

概念:

  • 工作区(Working Directory):在电脑里能看到的目录,比如learnGit文件夹就是一个工作区
  • 版本库(Repository):工作区有一个隐藏目录.git,这就是Git的版本库。
管理修改

每次修改,都需要使用 git add 将修改添加到暂存区,最后在 git commit提交。

撤销修改

git checkout -- file 命令可以丢弃工作区的修改,将工作区的修改全部撤销,让这个文件回到最近一次git commitgit add时的状态。

分为两种情况:

  • 一种是 file文件自修改后还没有被放到暂存区,=> 撤销修改就回到和版本库一模一样的状态;
  • 一种是 file文件已经添加到暂存区后,又作了修改,=> 撤销修改就回到添加到暂存区后的状态。

git reset HEAD <file> 命令可以把暂存区的修改撤销掉(unstage),重新放回工作区。

# 把readme.txt文件在工作区的修改全部撤销
$ git checkout -- readme.txt
# 把暂存区的修改撤销掉,重新放回工作区
$ git reset HEAD readme.txt

注意:没有 --,就变成了“切换到另一个分支”的命令,HEAD 表示最新的版本。

删除文件
  • 确定从版本库中删除该文件:git rm删掉,并且git commit

    $ git rm test.txt
    rm 'test.txt'
    
    $ git commit -m "remove test.txt"
    [master d46f35e] remove test.txt
     1 file changed, 1 deletion(-)
     delete mode 100644 test.txt
    
  • 删错了,可以把误删的文件恢复到最新版本:使用 git checkout 还原。

    $ git checkout -- test.txt
    

四、远程仓库

由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要在本地对密钥进行处理:

  1. 创建SSH Key。
    在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa(私钥,不能泄露出去)和id_rsa.pub(公钥)这两个文件,这两个就是SSH Key的秘钥对,如果已经有了,可直接跳到下一步。如果没有,打开 Git Bash,创建SSH Key:
    $ ssh-keygen -t rsa -C "youremail@example.com"
    # 之后一路回车,使用默认值安装即可,无需设置密码。
    
  2. 登陆GitHub,添加秘钥。
    登陆GitHub,点击头像,选择“Settings”,左侧选择“SSH and GPG keys”,然后右侧点“New SSH Key”, “SSH keys / Add new”页面,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,复制好之后点击“Add SSH key” 添加秘钥。
添加远程库

在本地创建了一个Git仓库后,又想在GitHub创建一个Git远程仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。

  1. 登陆GitHub,然后,在左侧Repositories处点击“New”,或者在右上角“+”找到“New repository”按钮,创建一个新的仓库。
    在这里插入图片描述
  2. 在Repository name填入要创建的仓库名learnGit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。
    在这里插入图片描述
  3. 此时,在GitHub上的这个learnGit仓库还是空的,我们可以使用命令行创建一个新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
  4. 现在我们本地是有仓库的,将本地仓库推送到GitHub仓库中。
    $ git remote add origin https://github.com/xxx/learnGit.git
    # origin 远程库,Git默认的叫法
    
  5. git push 命令将本地仓库的所有内容推送到我们的GitHub远程库上。
    # 把当前分支master推送到远程
    # -u:远程库是空的,第一次推送master分支时,加上了-u参数
    $ git push -u origin master
    # ...提交成功的内容
    
  6. 推送成功后,GitHub中就可以看到远程库的内容。
  7. 以后只要本地仓库内容做了修改,就可以进行提交。
    # 把本地master分支的最新修改推送至GitHub
    $ git push origin master
    
从远程库克隆
  1. 在GitHub上创建远程仓库时,勾选Initialize this repository with: Add a README file,会自动为我们创建一个README.md文件。
  2. git clone 命令克隆一个本地库
    $ git clone https://github.com/xxx/learnGit.git
    
  3. 就可以在本地看到克隆下来的文件夹了。

五、分支管理

创建与合并分支

HEAD 指向当前分支。

  1. git checkout -b 或者 git switch -c 命令创建dev分支,并且切换到dev分支上:

    # 方式一:git checkout -b
    $ git checkout -b dev
    Switched to a new branch 'dev'
    # -b参数表示创建并切换 
    # -b => git branch dev + git checkout dev
    
    # 方式二:git switch -c
    $ git switch -c dev
    
  2. git branch 命令查看当前分支:

    # git branch命令会列出所有分支,当前分支前面会标一个*号
    $ git branch
    * dev
      master
    
  3. 此时就可以在 dev 分支上正常修改提交操作。

  4. git checkout 或者 git switch 命令,切换回 master 分支:

    # 方式一:checkout 
    $ git checkout master
    # 方式二:switch 
    $ git switch master
    Switched to branch 'master'
    # 切换回master分支后,可以看到刚才添加的内容不见了!
    # 因为刚才提交是在dev分支上,而master分支此刻的提交点并没有变,需要进行合并。
    
  5. git merge 命令把 dev 分支的工作成果合并到 master 分支上:

    # git merge命令用于合并指定分支到当前分支。
    $ git merge dev
    Updating d46f35e..b17d20e
    Fast-forward
     readme.txt | 1 +
     1 file changed, 1 insertion(+)
    # Fast-forward:“快进模式”,就是直接把master指向dev的当前提交,所以合并速度非常快。
    
  6. git branch -d 命令删除dev分支

    $ git branch -d dev
    Deleted branch dev (was b17d20e).
    

    在一个新创建的分支还没有被合并时,进行删除:

    $ git branch -d feature-vulcan
    # 销毁失败
    error: The branch 'feature-vulcan' is not fully merged.
    If you are sure you want to delete it, run 'git branch -D feature-vulcan'.
    # feature-vulcan分支还没有被合并,如果删除,将丢失掉修改。
    # 如果要强行删除,需要使用大写的-D参数。
    

    使用 git branch -D 命令强行删除一个没有被合并过的分支

    $ git branch -D feature-vulcan
    Deleted branch feature-vulcan (was 287773e).
    
解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

  1. git status 命令可以告诉我们冲突的文件:

    $ git status
    On branch master
    Your branch is ahead of 'origin/master' by 2 commits.
      (use "git push" to publish your local commits)
    
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
    
    	both modified:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
  2. 可以直接查看冲突文件 readme.txt 的内容

    # readme.txt 文件内容
    # Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
    Git tracks changes of files.
    <<<<<<< HEAD
    Creating a new branch is quick & simple.
    =======
    Creating a new branch is quick AND simple.
    >>>>>>> feature1
    

    修改完之后再提交。

  3. 也可以用 git log --graph 命令查看分支的合并情况。

分支管理策略

Git在进行合并分支时,会默认使用 Fast forward 模式进行合并,这种模式下,删除分支后,会丢掉分支信息。

如果禁用 Fast forward 模式,Git就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息。

使用 --no-ff 方式进行 git merge

# --no-ff:表示禁用Fast forward模式
# 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)
Bug分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除。

当手头工作没有完成时,先用 git stash 命令把工作现场储藏起来,然后去修复bug,修复后,再 git stash pop 恢复工作现场继续工作。

  1. 先用 git stash 命令把工作现场储藏起来

    $ git stash
    Saved working directory and index state WIP on dev: f52c633 add merge
    
  2. 确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master 创建临时分支

    # 切换到master分支
    $ git checkout master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 6 commits.
      (use "git push" to publish your local commits)
    # 从master创建临时分支
    $ git checkout -b issue-101
    Switched to a new branch 'issue-101'
    
  3. 修复bug,然后提交

  4. 修复完成后,切换到master分支,并完成合并,最后删除临时分支

    # 切换到`master`分支
    $ git switch master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 6 commits.
      (use "git push" to publish your local commits)
    # 合并分支
    $ git merge --no-ff -m "merged bug fix 101" issue-101
    Merge made by the 'recursive' strategy.
     readme.txt | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
  5. bug修复完成,接着回到dev分支干活
    git stash list 命令找到工作现场:

    $ git stash list
    stash@{0}: WIP on dev: f52c633 add merge
    

    恢复工作现场:

    1. git stash apply 命令恢复,但是恢复后,stash内容并不删除,需要用git stash drop 命令来删除;
      $ git stash apply stash@{0}
      
    2. git stash pop 命令,恢复的同时把 stash 内容也删了
      $ git stash pop
      On branch dev
      Changes to be committed:
        (use "git reset HEAD <file>..." to unstage)
      
      	new file:   hello.py
      
      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.txt
      
      Dropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)
      
    3. 可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash
      $ git stash apply stash@{0}
      

master分支上修复的bug,想要合并到当前dev分支,可以用 git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

$ git branch
* dev
  master
# 复制一个特定的提交到当前分支
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)
多人协作

git remote 命令查看远程库的信息

$ git remote
origin

或者,用 git remote -v 命令显示更详细的信息

$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

推送分支

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

$ git push origin master
# 如果要推送其他分支,比如dev,就改成:
$ git push origin dev
抓取分支

多人协作(A和B两人)时,A B 都会往 masterdev 分支上推送各自的修改。
B 使用 git clone 将远程库克隆下来,默认情况下,B只能看到本地的master分支。

现在,B 要在 dev 分支上开发,就必须创建远程 origindev 分支到本地
git checkout -b 命令创建本地 dev 分支

$ git checkout -b dev origin/dev

在此期间,B 可以在 dev 上继续修改,然后把 dev 分支 push 到远程

$ git add env.txt
$ git commit -m "add env"
...
$ git push origin dev
...

B 已经向 origin/dev 分支推送了他的提交,而碰巧 A 也对同样的文件作了修改,并试图推送:

$ cat env.txt
env

$ git add env.txt

$ git commit -m "add new env"
[dev 7bd91f1] add new env
 1 file changed, 1 insertion(+)
 create mode 100644 env.txt

$ git push origin dev
To github.com:michaelliao/learngit.git
 ! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

推送失败,因为 B 的最新提交和 A 试图推送的提交有冲突
解决办法: Git已经提示我们,先用 git pull 把最新的提交从 origin/dev 抓下来,然后,在本地合并,解决冲突,再推送。

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> dev

git pull 也失败了
原因: 没有指定本地 dev 分支与远程 origin/dev 分支的链接
解决办法: 根据提示,设置 devorigin/dev 的链接

$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

pull

$ git pull
Auto-merging env.txt
CONFLICT (add/add): Merge conflict in env.txt
Automatic merge failed; fix conflicts and then commit the result.

现在 git pull 成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。
解决后,提交,再 push

$ git commit -m "fix env conflict"
[dev 57c53ab] fix env conflict

$ git push origin dev
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 621 bytes | 621.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
   7a5e5dd..57c53ab  dev -> dev
多人协作的工作模式
  1. 首先,可以试图用 git push origin <branch-name> 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用 git push origin <branch-name> 推送就能成功。
  5. 如果 git pull 提示 no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>
Rebase 操作

git rebase 操作可以把本地未 push 的分叉提交历史整理成直线。

$ git rebase
...一大堆...

目的 是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
缺点 是本地的分叉提交已经被修改过了。


六、标签管理

发布一个版本时,通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。
将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照,就是指向某个 commit 的指针。

创建标签
  1. 切换到需要打标签的分支上

    $ git branch
    * dev
      master
    $ git checkout master
    Switched to branch 'master'
    
  2. 使用命令 git tag <name> 就可以打一个新标签

    $ git tag v1.0
    
  3. 可以用命令 git tag 查看所有标签

    $ git tag
    v1.0
    

默认标签是打在最新提交的 commit 上的。

如何给之前的 commit 打标签

  • 找到历史提交的 commit id,然后打上就可以了。

    $ git log --pretty=oneline --abbrev-commit
    12a631b (HEAD -> master, tag: v1.0, origin/master) merged bug fix 101
    4c805e2 fix bug 101
    e1e9c68 merge with no-ff
    f52c633 add merge
    cf810e4 conflict fixed
    5dc6824 & simple
    14096d0 AND simple
    b17d20e branch test
    d46f35e remove test.txt
    b84166e add test.txt
    519219b git tracks changes
    e43a48b understand how stage works
    1094adb append GPL
    e475afc add distributed
    eaadf4e wrote a readme file
    

    比方说要对 add merge 这次提交打标签,它对应的 commit idf52c633

    $ git tag v0.9 f52c633
    

标签不是按时间顺序列出,而是按字母排序的。

git show <tagname> 查看标签信息:

$ git show v0.9
commit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.9)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:56:54 2018 +0800

    add merge

diff --git a/readme.txt b/readme.txt
...

创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字

$ git tag -a v0.1 -m "version 0.1 released" 1094adb

标签总是和某个 commit 挂钩。如果这个 commit 既出现在 master 分支,又出现在 dev分支,那么在这两个分支上都可以看到这个标签。

操作标签
  1. 删除标签
    因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

    $ git tag -d v0.1
    Deleted tag 'v0.1' (was f15b0dd)
    
  2. 推送某个标签到远程 命令: git push origin <tagname>

    $ git push origin v1.0
    Total 0 (delta 0), reused 0 (delta 0)
    To github.com:michaelliao/learngit.git
     * [new tag]         v1.0 -> v1.0
    
  3. 一次性推送全部尚未推送到远程的本地标签

    $ git push origin --tags
    Total 0 (delta 0), reused 0 (delta 0)
    To github.com:michaelliao/learngit.git
     * [new tag]         v0.9 -> v0.9
    
  4. 删除已经推送到远程的标签

    1. 先从本地删除
      $ git tag -d v0.9
      Deleted tag 'v0.9' (was f52c633)
      
    2. 从远程删除,删除命令也是 git push
      $ git push origin :refs/tags/v0.9
      To github.com:michaelliao/learngit.git
       - [deleted]         v0.9
      

    要看看是否真的从远程库删除了标签,可以登陆 GitHub 查看。


七、自定义Git

忽略特殊文件

在Git工作区的根目录下创建一个特殊的 .gitignore 文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

不需要从头写 .gitignore 文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

最后就是把 .gitignore 也提交到Git,就完成了!

有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被 .gitignore 忽略了。

$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.

解决方案:

  1. 确实想添加该文件,可以用 -f 强制添加到Git

    $ git add -f App.class
    
  2. 可能是 .gitignore 写得有问题,需要找出来到底哪个规则写错了,可以用 git check-ignore 命令检查

$ git check-ignore -v App.class
.gitignore:3:*.class	App.class
# Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
  1. 当我们编写了规则排除了部分文件

    # 排除所有.开头的隐藏文件:
    .*
    # 排除所有.class文件:
    *.class
    

    我们发现 .* 这个规则把 .gitignore 也排除了,并且 App.class 需要被添加到版本库,但是被 *.class 规则排除了。

    解决方案:可以添加两条例外规则(把指定文件排除在 .gitignore 规则外的写法就是 !+文件名 ,所以,只需把例外文件添加进去即可)

    # 排除所有.开头的隐藏文件:
    .*
    # 排除所有.class文件:
    *.class
    
    # 不排除.gitignore和App.class:
    !.gitignore
    !App.class
    
配置别名
# 设置别名 st 代替 status
$ git config --global alias.st status
# 设置别名 co 代替 checkout
$ git config --global alias.co checkout
# 设置别名 ci 代替 commit
$ git config --global alias.ci commit
# 设置别名 br 代替 branch
$ git config --global alias.br branch
# 把暂存区的修改撤销掉: 设置别名 unstage 代替 reset HEAD
$ git config --global alias.unstage 'reset HEAD'
# 显示最后一次提交信息: 设置别名 last 代替 log -1
$ git config --global alias.last 'log -1'
# 查看之前的提交日志: 设置别名 lg 代替 log ...
$ 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"

--global 参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用,如果不加,那只针对当前的仓库起作用。

删除别名
  1. 通过 --global 配置是针对当前用户的,如果不加,只针对当前的仓库起作用。
    每个仓库的Git配置文件都放在 .git/config 文件中;
    别名就在 [alias] 后面,要删除别名,直接把对应的行删掉即可。

    $ cat .git/config 
    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
    [remote "origin"]
        url = git@github.com:michaelliao/learngit.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    [alias]
        last = log -1
    
  2. 通过 --global 配置是针对当前用户的,当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件 .gitconfig 中。

    $ cat .gitconfig
    [alias]
        co = checkout
        ci = commit
        br = branch
        st = status
    [user]
        name = Your Name
        email = your@email.com
    

配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。


使用GUI工具 – SourceTree

SourceTree 它是由Atlassian开发的免费Git图形界面工具,可以操作任何Git库。

SourceTree使用
  1. 首先从官网下载 SourceTree并安装,然后直接运行 SourceTree。

  2. 第一次运行 SourceTree 时,SourceTree 并不知道我们的 Git 库在哪。

    1. 如果本地已经有了 Git 库,直接从资源管理器把文件夹拖拽到 SourceTree 上,就添加了一个本地 Git 库。
    2. 也可以选择“New”-“New tab”直接从远程克隆到本地。
  3. 提交

    1. 双击打开这个本地库,SourceTree会打开另一个窗口,展示这个Git库的当前所有分支以及文件状态。选择左侧面板的“WORKSPACE”-“File status”,右侧会列出当前已修改的文件:
      在这里插入图片描述

    2. 选中某个文件,该文件就自动添加到“Staged files”,实际上是执行了 git add README.md 命令

    3. 我们在下方输入 Commit 描述,点击“Commit”,就完成了一个本地提交,实际上是执行了 git commit -m "update README.md"命令

  4. 分支
    在左侧面板的“BRANCHES”下,列出了当前本地库的所有分支。当前分支会加粗并用 ○ 标记。

    1. 要切换分支,我们只需要选择该分支,例如master,然后点击右键,在弹出菜单中选择“Checkout master”,实际上是执行命令 git checkout master
    2. 要合并分支,同样选择待合并分支,例如 dev,然后点击右键,在弹出菜单中选择“Merge dev into master”,实际上是执行命令 git merge dev
  5. 推送
    在SourceTree的工具栏上,分别有 PullPush,分别对应命令 git pullgit push,只需注意本地和远程分支的名称要对应起来,使用时十分简单。

SourceTree使用Git命令执行操作,出错时,仍然需要阅读Git命令返回的错误信息。

SourceTree 切换中文版
  1. 找到 “Tools” => “Options”,打开“Options”;
    在这里插入图片描述
  2. 在 “General” 选项卡找到 “Repo Settiongs”设置栏,“Language” 选择相应的语言;
    在这里插入图片描述
  3. 点击ok,重启 SourceTree 即生效。

通过以上的学习总结,Git 基本的使用操作和命令已经可以掌握了,Git的十几个命令基本上可以满足我们正常的工作需求了,可以极大的提高我们的工作效率。


参考资料:

  1. 廖雪峰的官方网站·Git教程
  2. Git的官方网站
  3. Git Cheat Sheet
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值