目录
一、说明
二、Git安装和常用命令
1. 下载
2. 设置用户信息
3. 常用指令配置别名(为了方便)
4. 解决git bash终端中文乱码问题
5. 创建本地仓库
6.基础操作指令
下面以file_01.txt的创建和修改为例:
7.分支
1. 查看分支:
2. 添加分支:
3. 切换分支:
4.创建的同时切换分支:
5. 合并分支:
6. 删除分支
7. 解决冲突
8. 实际开发中分支的一般原则和使用流程
8. Git远程仓库管理
1.创建远程仓库:
2. 配置SSH公钥
3. 验证配置
3. 远程仓库添加查看和推送
3. 本地仓库推送到远程仓库
4.克隆远程仓库到本地
5. 远程仓库抓取和拉取
6. 解决合并冲突
三、Visual Studio(2019)的git版控
1.创建本地仓库并推送
2. VS git 视图
?3. 添加Git存储库
4. 克隆存储库
5. 提交记录查看 git log
6.修改上一个提交
7.版本回退 git reset
?8. 文件暂存git add
?9. 忽略文件 .gitignore
10. 版本还原 git revert
11.创建标记
12.新建分支
13.切换分支
14. 合并分支
15.合并冲突管理
16.重定基底
17. 抓取、拉取、推送、同步
一、说明
Git是项目版本控制使用最广泛的工具,与SVN不同,后者依赖中心服务器,一旦中心服务器宕机,会造成较大的影响。Git虽有远程仓库概念,但同时是分布式的,本地同时也是完整的仓库,无论是管理速度和安全都有巨大提升。
二、Git安装和常用命令
1. 下载
下载地址:官网:?http://git-scm.com/download
? ? ? ? ? ? ? ? 镜像:https://registry.npmmirror.com/binary.html?path=git-for-windows/
下载安装完成后,桌面右键会有图形化界面和终端入口:Git GUI Here 和 Git BASH Here,分别是图形化界面和终端。
2. 设置用户信息
打开 git bash输入:
git config --global user.name "用户名"
git config --global user.email "用户邮箱"
3. 常用指令配置别名(为了方便)
3.1 在用户目录下创建.bashrc 文件:
touch ~/.bashrc
3.2 用文本编辑器打开 .bashrc文件,输入:
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
alias ll='ls -al'
注意不要多加空格。
3.3 修改完后source一下,在给git bash终端:
source ~/.bashrc
4. 解决git bash终端中文乱码问题
4.1 打开git bash终端输入:
git config --global core.quotepath false
4.2 在git安装目录的/etc/bash.bashrc文件最后加入:
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
5. 创建本地仓库
步骤:
1.任意位置新建目录作为本地git仓库
2.在目录中打开git bash终端,输入:
git init
3.创建成功则会出现 .git 目录
6.基础操作指令
新建的目录中除了.git目录都是工作目录,工作目录中的文件修改时分为几个状态,这些状态随着git指令在变化。
?首先,对工作区的文件分为:1.创建新文件;2.对已存在的文件进行修改。这时,文件对应的状态分别是1. 未跟踪和2. 未暂存。工作区的文件经过修改后,通过git add指令进入暂存区,然后通过git commit才最后到了仓库中,仓库每次收到git commit就会记录一次提交信息,从而实现版本控制。
1. git add:工作区到暂存区, 文件名可以用通配符.
2. git commit:暂存区到仓库区,-m加注释
3. git status:查看修改的状态
4. git log [option]:查看提交记录
? ? ? ? ? ? ? ? ? ? ? ? ? ?--all? 显示所有分支
? ? ? ? ? ? ? ? ? ? ? ? ? ?--pretty=online? 将提交信息显示为一行
? ? ? ? ? ? ? ? ? ? ? ? ? ?--abbrev-commit 使输出更简短
? ? ? ? ? ? ? ? ? ? ? ? ? ?--graph? 以图的形式显示
下面以file_01.txt的创建和修改为例:
1.工作区创建file_01.txt
touch file_01.txt
2. 使用git status查看工作区状态
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
file01.txt
nothing added to commit but untracked files present (use "git add" to track)
Untracked files即为处于未跟踪状态的文件,终端同时也提示了使用git add来进行跟踪,即加载到暂存区
3. 使用git add 文件名对文件进行跟踪
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git add file01.txt
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: file01.txt
再查看状态,file_01.txt已经成了即将提交的状态,此时在暂存区.
4. 使用git commit -m "注释" 提交到仓库区,注释就是版本改动内容
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git commit -m "commit file_01.txt"
[master (root-commit) 6c2289a] commit file_01.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file01.txt
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git status
On branch master
nothing to commit, working tree clean
查看状态,工作区已经干净了git log可以查看仓库的提交记录.
5. git log可以查看仓库的提交记录
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git log
commit 6c2289a6e81ff1b065fd80a09dea13ec4b122847 (HEAD -> master)
Author: cxb <1320414730@qq.com>
Date: Mon Apr 4 00:56:22 2022 +0800
commit file_01.txt
可以看到,提交记录中, 记录了提交作者,时间等信息,可以追踪文件维护者.
6. 对file_01.txt文件进行修改后再次查看状态
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: file01.txt
no changes added to commit (use "git add" and/or "git commit -a")
可以看到文件被修改,并处于not staged未暂存状态.
7. git add将文件加载到暂存区,git commit将文件提交到仓库,并查看
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git add file01.txt
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git commit -m "commit file_01.txt second"
[master faf6f6a] commit file_01.txt second
1 file changed, 1 insertion(+)
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git log
commit faf6f6a2b600c91e84d50dbe156078d247f48f3b (HEAD -> master)
Author: cxb <1320414730@qq.com>
Date: Mon Apr 4 01:07:07 2022 +0800
commit file_01.txt second
commit 6c2289a6e81ff1b065fd80a09dea13ec4b122847
Author: cxb <1320414730@qq.com>
Date: Mon Apr 4 00:56:22 2022 +0800
commit file_01.txt
可以看到有两次提交记录.
8.版本切换: git reset ,使用git reset --hard 唯一标识符,即可切换版本.
例如将file_01.txt切换到未修改的版本:
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git reset --hard 6c2289a
HEAD is now at 6c2289a commit file_01.txt
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git-log
* 6c2289a (HEAD -> master) commit file_01.txt
版本回退后,提交记录只剩下了最开始的那条,文件也回到了修改前的版本,此时如果又想切换到修改过的版本,就要知道修改后的版本的唯一标识符.可以通过git reflog查看记录.
9.用git reflog查看记录找到修改后版本的唯一标识符
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git reflog
6c2289a (HEAD -> master) HEAD@{0}: reset: moving to 6c2289a
faf6f6a HEAD@{1}: commit: commit file_01.txt second
6c2289a (HEAD -> master) HEAD@{2}: commit (initial): commit file_01.txt
可以看到修改后的版本唯一标识符为 faf6f6a,用操作8即可切回修改后的版本.
10.切换回修改后的版本
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git reset --hard faf6f6a
HEAD is now at faf6f6a commit file_01.txt second
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git-log
* faf6f6a (HEAD -> master) commit file_01.txt second
* 6c2289a commit file_01.txt
11.用通配符的而方式git add . 管理文件时,可以创建.gitignore来指定文件排除在管理范围外,在.gitignore中输入要忽略的文件名即可.
7.分支
分支是多人协作开发的一个重要概念,把自己的工作从主线上分离,即每个人都在自己的支线上修改,互不影响,最后再做合并。
1. 查看分支:
以上面的file_01.txt为例,用git branch可以查看项目分支:
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git-log
* faf6f6a (HEAD -> master) commit file_01.txt second
* 6c2289a commit file_01.txt
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git branch
* master
可以看到打印记录的HEAD指向的master就是当前对应的分支。
2. 添加分支:
git branch 分支名 可以添加新分支:
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git branch dev01
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git-log
* faf6f6a (HEAD -> master, dev01) commit file_01.txt second
* 6c2289a commit file_01.txt
添加分支后再查看,发现已经有master和dev01两个分支,且分支有相同的提交记录,因为是从当前状态建立的新分支,创建前的状态是相同的。
3. 切换分支:
此时存在多个分支,当前分支为HEAD指向的分支,修改文件时只会对当前分支文件进行修改,要切换分支进行操作,用git checkout 分支名:
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git checkout dev01
Switched to branch 'dev01'
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (dev01)
$ git-log
* faf6f6a (HEAD -> dev01, master) commit file_01.txt second
* 6c2289a commit file_01.txt
HEAD指向了dev01。
4.创建的同时切换分支:
git checkout -b 分支名,在创建新分支同时切换到新分支上:
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (dev01)
$ git checkout -b dev02
Switched to a new branch 'dev02'
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (dev02)
$ git-log
* faf6f6a (HEAD -> dev02, master, dev01) commit file_01.txt second
* 6c2289a commit file_01.txt
5. 合并分支:
在dev01分支上创建file02.txt并提交到仓库中,其他分支仓库访问不到该提交记录,而多人协作开发最后需要功能整合,需要分支合并,一般将其他支线合并到master上,首先切换到master支线,输入git merge 分支,出现类似vim界面,按ecs,:wq保存退出:
####分支合并前的状态
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (dev01)
$ git-log
* 3af61e6 (HEAD -> dev01) add file02
* faf6f6a (master, dev02) commit file_01.txt second
* 6c2289a commit file_01.txt
####分支合并
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git merge dev01
Updating faf6f6a..3af61e6
Fast-forward
file02.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file02.txt
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git-log
* 3af61e6 (HEAD -> master, dev01) add file02
* faf6f6a (dev02) commit file_01.txt second
* 6c2289a commit file_01.txt
dev01支线的改动合并到了master中,这里是merge的快进模式。dev和master都有修改时merge才会是拱形记录,若只是dev上有修改,合并到master上就会用Fast-forward快进模式,不显示为拱形。
6. 删除分支
git branch -d 分支:询问删除,删除前检查
git branch -D 分支:强制删除
注意在支线下不能删除本身支线。
7. 解决冲突
不同支线对同一个文件进行修改时,合并支线会发生冲突,此时需要管理人手动解决。
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git merge dev
Auto-merging test01.txt
CONFLICT (content): Merge conflict in test01.txt
Automatic merge failed; fix conflicts and then commit the result.
<<<<<<< HEAD
3
=======
1
>>>>>>> dev
3和1即为两个支线中对同一个空白文件的插入修改,自行选择保留的修改。
8. 实际开发中分支的一般原则和使用流程
1.master分支: 需要拿来上线的分支,主分支,线上分支。
2.develop分支:
从master创建的开发分支,但并不直接在这分支上开发,而是进一步创建feature分支进行开发。事实上可以理解成内部测试用的master分支。
3.feature分支:
从develop分支创建的多个feature并行开发分支,分支开发完成后合并到deveelop分支。
4.hotfix分支:
从master派生的分支,线上bug修复分支,修复完成后合并到master、develop、test分支等。
8. Git远程仓库管理
公司一般搭建自己的服务器用Gitlab,为了方便学习,这里用国内站点码云。
在官网注册登陆账号:https://gitee.com/。
1.创建远程仓库:
点击页面右上角加号新建仓库,输入仓库名称即可。
2. 配置SSH公钥
1. 生成公钥
ssh-keygen -t rsa
可以无视接下来的输入操作,一路回车直到生成结束。
2. 获取公钥
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master|MERGING)
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCg1DhCz09Ss8v3Y8ccpUSw5sJpJXkiMhyd5EMlLF6IcbJ/Zeag7PXyu/d9jPGwYIJEhEgEEy94L/SN9V4trpDJhfuHlEscShHso+BFuDDEWYnxf8WTs3m3G349XNztVrRIQ6eoagkNnNanjoovBWxIp/G0wXX35VPNRksJkLiwMexdCc5dJnduIIUrg8zb3By0z5oTM8n4ur8PSvgjrfdDDWX5cIMx+dPV7vfV5x85PMJ2SwnKShtvnR8Npj8lR2+ZxFYYNnEcu5X6TFE+eK/oYmjnW8GE7td78gwBnbKOI8BkmHCARAr0ZsH0bEEe3+HSn/FMHYgd4JPVhZLoKElafFiNaV1FDPGeRHzo9KzqY6bZuPDxTShdkPWW6H1scWUn/jHsf2RJ+7mJzO1X/M29QdyKaCVGm8dgf6UHddB2A7vJWlPRL1YxwbLqPFzGQeMWzM+A8u8JD5Q1uomqgIEh72ok1YFInnaacRehsVo7tpkYwAVBhYZcGaz3CAC3xxE= cxb@DESKTOP-R5FJB2M
复制打印内容,到码云个人中心设置界面的安全设置输入公钥:
点击确定并输入码云密码。
3. 验证配置
在git bash终端可以验证配置是否成功:
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master|MERGING)
$ ssh -T git@gitee.com
The authenticity of host 'gitee.com (212.64.62.183)' can't be established.
ED25519 key fingerprint is SHA256:+ULzij2u99B9eWYFTw1Q4ErYG/aepHLbu96PAUCoV88.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com' (ED25519) to the list of known hosts.
Hi cxb! You've successfully authenticated, but GITEE.COM does not provide shell access.
3. 远程仓库添加查看和推送
1.添加远程仓库
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git remote add origin git@gitee.com:chenxiaobin1998/git_test.git
git remote add origin(约定俗成的远程仓库名字) 远程git地址
2. 查看远程仓库
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git remote
origin
可以看到有了远程仓库origin。
3. 本地仓库推送到远程仓库
git push [-f] [---set-upstream] 远端名称 本地分支名:远端分支名
-f:强制覆盖
--set-upstream:推送到远端同时建立起和远端的对应关联
如果已经有关联,则后面的都可以省去
######第一次推送,由于远程仓库为空才会出现下列提示
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git push origin master
Enumerating objects: 28, done.
Counting objects: 100% (28/28), done.
Delta compression using up to 4 threads
Compressing objects: 100% (19/19), done.
Writing objects: 100% (28/28), 2.28 KiB | 292.00 KiB/s, done.
Total 28 (delta 4), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
To gitee.com:chenxiaobin1998/git_test.git
* [new branch] master -> master
#########--set-upstream关联本地分支和远程分支
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git push --set-upstream origin master:master
Everything up-to-date
branch 'master' set up to track 'origin/master'.
#########git branch -vv可以查看本地和远程关联状态
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git branch -vv
dev a843778 add 1
* master 5c36cb3 [origin/master] merge test01
##########关联后直接用git push就可以推送
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git push
Everything up-to-date
4.克隆远程仓库到本地
在github上下载代码时已经经常用到:
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习
$ git clone git@gitee.com:chenxiaobin1998/git_test.git clone_git
Cloning into 'clone_git'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 28 (delta 4), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (28/28), done.
Resolving deltas: 100% (4/4), done.
git clone 克隆地址 克隆到本地后的仓库名。
5. 远程仓库抓取和拉取
git clone克隆了整个项目,一般只会在第一次克隆整个项目,后续都只要获取远程仓库的更新,因此git clone不适用。要用抓取:git fetch和拉取:git pull,两者的差别是手动merge。
############本地仓库创建test04.txt并推送到远程仓库
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ touch test04.txt
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git add test04.txt
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git commit -m 'add test04'
[master 7c95f6f] add test04
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test04.txt
############push时已经做了merge
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 242 bytes | 242.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
To gitee.com:chenxiaobin1998/git_test.git
5c36cb3..7c95f6f master -> master
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/git_test (master)
$ git-log
* 7c95f6f (HEAD -> master, origin/master) add test04
* 5c36cb3 merge test01
|\
| * a843778 (dev) add 1
* | bbf32d2 add 3
|/
* c27668c Merge branch 'dev02'
|\
| * 7376661 add test03
* | 6c7aca0 delete test03
* | d4e9789 add test03
|/
* f074abc add test02
* 807b221 add file01
* 6b1a9ef file01
* 3af61e6 add file02
* faf6f6a commit file_01.txt second
* 6c2289a commit file_01.txt
用git fetch拉取远程更新,需要自己merge:
##############抓取并查看记录,可以看到并没有merge
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/clone_git (master)
$ git fetch
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 222 bytes | 44.00 KiB/s, done.
From gitee.com:chenxiaobin1998/git_test
5c36cb3..7c95f6f master -> origin/master
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/clone_git (master)
$ git-log
* 7c95f6f (origin/master, origin/HEAD) add test04
* 5c36cb3 (HEAD -> master) merge test01
|\
| * a843778 add 1
* | bbf32d2 add 3
|/
* c27668c Merge branch 'dev02'
|\
| * 7376661 add test03
* | 6c7aca0 delete test03
* | d4e9789 add test03
|/
* f074abc add test02
* 807b221 add file01
* 6b1a9ef file01
* 3af61e6 add file02
* faf6f6a commit file_01.txt second
* 6c2289a commit file_01.txt
需要将远程仓库分支merge到本地仓库:
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/clone_git (master)
$ git merge origin/master
Updating 5c36cb3..7c95f6f
Fast-forward
test04.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test04.txt
cxb@DESKTOP-R5FJB2M MINGW64 /d/git学习/clone_git (master)
$ git-log
* 7c95f6f (HEAD -> master, origin/master, origin/HEAD) add test04
* 5c36cb3 merge test01
|\
| * a843778 add 1
* | bbf32d2 add 3
|/
* c27668c Merge branch 'dev02'
|\
| * 7376661 add test03
* | 6c7aca0 delete test03
* | d4e9789 add test03
|/
* f074abc add test02
* 807b221 add file01
* 6b1a9ef file01
* 3af61e6 add file02
* faf6f6a commit file_01.txt second
* 6c2289a commit file_01.txt
可以看到本地仓库完成了merge,并且文件得到了更新。
git pull在拉取的过程中完同时完成了merge。
6. 解决合并冲突
场景描述:A和B修改了同一个文件的同一行代码,A先提交到了远程仓库,B比A晚,提交前要先拉取远程仓库的合并后再提交,因此拉取到了A的更新,发生了分支合并冲突。解决方法和本地冲突一致。
三、Visual Studio(2019)的git版控
以上学习都是基于终端命令行完成的,实际开发中大多依赖ide完成,这里介绍收集并学习的Visual Studio集成环境的git版控。
1.创建本地仓库并推送
1. 文件 —> 新建 —> 存储库 —> 添加远程仓库 —> 创建并推送
2. 已有项目解决方案右键 —> 创建Git存储库 —>?添加远程仓库 —> 创建并推送
2. VS git 视图
红色标记中对应抓取,拉取,推送和同步(拉取并推送)。
绿色标记对应更改的挂起,即代码修改自动生成了更改挂起,对应git add。
?黑色标记即是当前分支,其中可以新建分支并查看历史提交记录。
当代码修改后,绿色标记自动产生了更改记录,点击后进入Git更改视图,写修改注释并全部提交,对应了git commit -m命令,推送到了本地仓库。
?3. 添加Git存储库
菜单栏Git(G)?—> 本地存储库 —> 文件夹。
选择对应的Git仓库,双击进入对应仓库,2. VS git 视图中绿色标记和黑色标记中间的选项即为仓库选择。
4. 克隆存储库
菜单栏Git—>克隆存储库—>输入项目git地址
5. 提交记录查看 git log
以及提过黑色标记处可以查看历史记录,点击选择分支右键查看历史纪录:
?可以看到提交情况,包括唯一标识符,作者,日期,注释和分支合并等,如果想看红色标记对应版本是由两个分支谁向谁合并得到的,点击黄色标记框处,显示得到的就是各版本父代,或者直接点击黄框左边的转到父代。
6.修改上一个提交
勾中修改,会显示上一次提交的改动,在这个基础上进行提交,会覆盖上一次提交的内容和记录。若要恢复,目前只能在终端用git reflog找回。
7.版本回退 git reset
VS中的版本回退需要在提交记录中完成,调出提交记录,右键想要回退到的版本,选择重置对应的选项。保留更改指只回退提交版本记录,但代码修改还在,删除更改只回退提交版本记录的同时彻底还原了代码。
?8. 文件暂存git add
同时修改了多个文件,但暂时只想提交部分文件,可以只将这部分文件暂存,再点全部提交时就只commit暂存推列中的文件。
?9. 忽略文件 .gitignore
VS在项目生成版控时自动生成了.gitignore文件并加入了常规的文件,因此大部分不需要自己改动,若有需要自定义的,在该文件加入文件名即可。
10. 版本还原 git revert
还原(撤销)某个版本的修改,右键对应的版本,在重置上面有个还原选项,执行。
11.创建标记
对重要的版本更新做记录:
打开提交历史记录—>选中版本右键—>创建标记—>输入标记名—>创建标记
再次刷新记录就可以看到对应的版本末尾出现了标记信息。
12.新建分支
1. 打开提交历史记录—>选中版本右键—>新建分支(基于选中的分支)
2.?点击黑色标记可以看到新建分支选项,此时手动选择基于的父代版本。
13.切换分支
黑色标记显示了当前分支,点击进入可以看到本地分支和远程分支列表,双击切换。
14. 合并分支
黑色标记表示当前分支,点击进入可以看到本地分支和远程分支列表,右键其他分支选择合并到当前分支。
15.合并冲突管理
修改了相同文件的同一行代码为不同内容会引发合并冲突。会显示未合并存在冲突的文件,右键选择保留分支哪一方的内容,或者选择合并会出现三个视图,分别是两个分支的修改和第三个你最终想要确定的修改,可以在第三个视图上编辑,最后接受合并。
16.重定基底
git rebase修改支线基于的父代:选择黑色标记,右键选选定的支线选择重定基底到...选项,先择基底并重定即可。
17. 抓取、拉取、推送、同步
功能在终端指令都有介绍,VS中都集成在红色标记处。选择使用即可。
|