写这篇学习教程的原因是因为我之前一直对 Git 的理解很浅,只会对一些简单常用的命令进行操作,一旦出现问题就只能百度,这也一直令我很头疼。所以趁着这段时间,打算由浅入深的学习一下Git教程,主要参考资料为廖雪峰的Git教程。
这里有最新烫手的 Git 命令大全 哦~
一、Git 的安装与配置
- 通过git官网直接下载安装:git官网下载 ,下载对应的版本,默认安装即可。
- 安装完成,在开始菜单 -> Git -> Git Bash,打开一个命令行窗口即安装成功;或者桌面鼠标右键 -> Git Bash Here,同样打开一个命令行窗口。
- 配置你的用户名与Email地址:
注意:$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
git config
命令的--global
参数,表示这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
二、创建仓库(版本库)
-
创建一个空目录
$ mkdir learnGit # 创建目录 $ cd learnGit # 进入该目录 $ pwd # 显示当前目录 /c/Users/jingx/Desktop/learnGit
-
使用
git init
命令把这个目录变成Git仓库$ git init Initialized empty Git repository in C:/Users/jingx/Desktop/learnGit/.git/
-
把文件添加到版本库
(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 commit
或 git 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
加密的,所以,需要在本地对密钥进行处理:
- 创建SSH Key。
在用户主目录下,看看有没有.ssh
目录,如果有,再看看这个目录下有没有id_rsa
(私钥,不能泄露出去)和id_rsa.pub
(公钥)这两个文件,这两个就是SSH Key
的秘钥对,如果已经有了,可直接跳到下一步。如果没有,打开 Git Bash,创建SSH Key:$ ssh-keygen -t rsa -C "youremail@example.com" # 之后一路回车,使用默认值安装即可,无需设置密码。
- 登陆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上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。
- 登陆GitHub,然后,在左侧Repositories处点击“New”,或者在右上角“+”找到“New repository”按钮,创建一个新的仓库。
- 在Repository name填入要创建的仓库名
learnGit
,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。
- 此时,在GitHub上的这个
learnGit
仓库还是空的,我们可以使用命令行创建一个新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。 - 现在我们本地是有仓库的,将本地仓库推送到GitHub仓库中。
$ git remote add origin https://github.com/xxx/learnGit.git # origin 远程库,Git默认的叫法
git push
命令将本地仓库的所有内容推送到我们的GitHub远程库上。# 把当前分支master推送到远程 # -u:远程库是空的,第一次推送master分支时,加上了-u参数 $ git push -u origin master # ...提交成功的内容
- 推送成功后,GitHub中就可以看到远程库的内容。
- 以后只要本地仓库内容做了修改,就可以进行提交。
# 把本地master分支的最新修改推送至GitHub $ git push origin master
从远程库克隆
- 在GitHub上创建远程仓库时,勾选
Initialize this repository with: Add a README file
,会自动为我们创建一个README.md
文件。 git clone
命令克隆一个本地库$ git clone https://github.com/xxx/learnGit.git
- 就可以在本地看到克隆下来的文件夹了。
五、分支管理
创建与合并分支
HEAD
指向当前分支。
-
用
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
-
用
git branch
命令查看当前分支:# git branch命令会列出所有分支,当前分支前面会标一个*号 $ git branch * dev master
-
此时就可以在
dev
分支上正常修改提交操作。 -
用
git checkout
或者git switch
命令,切换回master
分支:# 方式一:checkout $ git checkout master # 方式二:switch $ git switch master Switched to branch 'master' # 切换回master分支后,可以看到刚才添加的内容不见了! # 因为刚才提交是在dev分支上,而master分支此刻的提交点并没有变,需要进行合并。
-
用
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的当前提交,所以合并速度非常快。
-
用
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合并失败的文件手动编辑为我们希望的内容,再提交。
-
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")
-
可以直接查看冲突文件
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
修改完之后再提交。
-
也可以用
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
恢复工作现场继续工作。
-
先用
git stash
命令把工作现场储藏起来$ git stash Saved working directory and index state WIP on dev: f52c633 add merge
-
确定要在哪个分支上修复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'
-
修复bug,然后提交
-
修复完成后,切换到
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(-)
-
bug修复完成,接着回到dev分支干活
用git stash list
命令找到工作现场:$ git stash list stash@{0}: WIP on dev: f52c633 add merge
恢复工作现场:
- 用
git stash apply
命令恢复,但是恢复后,stash
内容并不删除,需要用git stash drop
命令来删除;$ git stash apply stash@{0}
- 用
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)
- 可以多次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 都会往 master
和 dev
分支上推送各自的修改。
B 使用 git clone
将远程库克隆下来,默认情况下,B只能看到本地的master
分支。
现在,B 要在 dev
分支上开发,就必须创建远程 origin
的 dev
分支到本地
用 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
分支的链接
解决办法: 根据提示,设置 dev
和 origin/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
多人协作的工作模式
- 首先,可以试图用
git push origin <branch-name>
推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; - 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin <branch-name>
推送就能成功。 - 如果
git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。
Rebase 操作
git rebase
操作可以把本地未 push
的分叉提交历史整理成直线。
$ git rebase
...一大堆...
目的 是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
缺点 是本地的分叉提交已经被修改过了。
六、标签管理
发布一个版本时,通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。
将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照,就是指向某个 commit
的指针。
创建标签
-
切换到需要打标签的分支上
$ git branch * dev master $ git checkout master Switched to branch 'master'
-
使用命令
git tag <name>
就可以打一个新标签$ git tag v1.0
-
可以用命令
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 id
是f52c633
:$ 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
分支,那么在这两个分支上都可以看到这个标签。
操作标签
-
删除标签
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。$ git tag -d v0.1 Deleted tag 'v0.1' (was f15b0dd)
-
推送某个标签到远程 命令:
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
-
一次性推送全部尚未推送到远程的本地标签
$ git push origin --tags Total 0 (delta 0), reused 0 (delta 0) To github.com:michaelliao/learngit.git * [new tag] v0.9 -> v0.9
-
删除已经推送到远程的标签
- 先从本地删除
$ git tag -d v0.9 Deleted tag 'v0.9' (was f52c633)
- 从远程删除,删除命令也是
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
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
最后就是把 .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.
解决方案:
-
确实想添加该文件,可以用
-f
强制添加到Git$ git add -f App.class
-
可能是
.gitignore
写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore
命令检查
$ git check-ignore -v App.class
.gitignore:3:*.class App.class
# Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
-
当我们编写了规则排除了部分文件
# 排除所有.开头的隐藏文件: .* # 排除所有.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仓库下都有用,如果不加,那只针对当前的仓库起作用。
删除别名
-
通过
--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
-
通过
--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使用
-
首先从官网下载 SourceTree并安装,然后直接运行 SourceTree。
-
第一次运行 SourceTree 时,SourceTree 并不知道我们的 Git 库在哪。
- 如果本地已经有了 Git 库,直接从资源管理器把文件夹拖拽到 SourceTree 上,就添加了一个本地 Git 库。
- 也可以选择“New”-“New tab”直接从远程克隆到本地。
-
提交
-
双击打开这个本地库,SourceTree会打开另一个窗口,展示这个Git库的当前所有分支以及文件状态。选择左侧面板的“WORKSPACE”-“File status”,右侧会列出当前已修改的文件:
-
选中某个文件,该文件就自动添加到“Staged files”,实际上是执行了
git add README.md
命令 -
我们在下方输入 Commit 描述,点击“Commit”,就完成了一个本地提交,实际上是执行了
git commit -m "update README.md"
命令
-
-
分支
在左侧面板的“BRANCHES”下,列出了当前本地库的所有分支。当前分支会加粗并用 ○ 标记。- 要切换分支,我们只需要选择该分支,例如
master
,然后点击右键,在弹出菜单中选择“Checkout master”,实际上是执行命令git checkout master
; - 要合并分支,同样选择待合并分支,例如
dev
,然后点击右键,在弹出菜单中选择“Merge dev into master”,实际上是执行命令git merge dev
。
- 要切换分支,我们只需要选择该分支,例如
-
推送
在SourceTree的工具栏上,分别有Pull
和Push
,分别对应命令git pull
和git push
,只需注意本地和远程分支的名称要对应起来,使用时十分简单。
SourceTree使用Git命令执行操作,出错时,仍然需要阅读Git命令返回的错误信息。
SourceTree 切换中文版
- 找到 “Tools” => “Options”,打开“Options”;
- 在 “General” 选项卡找到 “Repo Settiongs”设置栏,“Language” 选择相应的语言;
- 点击ok,重启 SourceTree 即生效。
通过以上的学习总结,Git 基本的使用操作和命令已经可以掌握了,Git的十几个命令基本上可以满足我们正常的工作需求了,可以极大的提高我们的工作效率。
参考资料: