git学习笔记
git学习视频指路
0. git的下载与安装
0.0 git下载
官网地址是https://www.git-scm.com/downloads,
选择Windows版本下载
0.1 git安装
最新版本好像无法修改安装路径
安装界面:
- 第一页是协议,同意即可.
- 第二页是功能选择:第一项on the desktop不选,第二项添加鼠标右键选项勾上(Windows explorer integration),第三项勾选,其他保持默认.
- 第三页是默认编辑器,选择使用Vim(VScode我没用过,下次尝试)
- 第四页是默认分支目录选择:默认
- 第五页是git的命令行使用处:选择第一项,use git from git bash only.防止与Windows命令冲突
- 第六页是远程库:默认第一项
- 第七页是末尾换行符的转换:默认第一项
- 第八页是终端模拟器:默认第一项
- 第九页是拉取远程库时的默认操作:默认第一项
- 第十页证书管理:第一项第二项都可以
- 第十一页功能增强:默认第一项允许系统缓存
- 第十二页:实验功能,使用过程中可能会遇到bug,选和不选都可以
- 点击install,等待即可
- 最后会弹出一个界面提示已经安装完成,第一个勾是立刻打开git bash,第二个勾是查看最新git特性,看个人爱好勾选,然后退出,回到桌面右键即可看到git bash here 和 git GUI here,证明安装成功
1. git的使用
1.0 git的初始化命令
1.0.1 linux命令(敲门级别)
$ ll:查看当前目录下的文件以及详细情况
$ ll +文件名: 查看指定文件夹中的详细信息
$ ls: 只查看目录下的文件,没有详细信息(list files)
$ ls +文件名: 查看指定文件夹中的含有文件
$ ll -la:查看当前目录下的所有文件以及详细情况(包括隐藏)
($ ls -la作用相同)
$ ll -l|less:分屏查看当前目录下的所有文件,home上一页,
end下一页,q退出;此时ll和la作用相同
$ mkdir +filename: 在当前目录下新建名字
为(filename)的文件夹
(make directory)
$ cd +文件夹名字: 进入指定文件夹(change directory)
cd ~ :进入系统用户根目录
cd .. :返回上级目录
cd ../../../(filename):先返回n次上级文件夹,
然后在当前文件夹中打开指定的文件夹
!tab键有自动补全功能!
$ pwd :(print work directory)打印当前路径
$ rm filename 删除文件
$ rmdir: 删除目录(remove directory)
或者是$ rm -r filename
$ touch +文件名+后缀: 创建一个文件
$ cat +存在的文件名:(concatenate files and print on
the standard output把文件连接后
输出到屏幕上)
$ tail -n (num) (filename)将文件最后num行显示
1.0.2 git初始化命令
1. $ mkdir git_learning
2. $ cd git_learing
3. $ mkdir git_init
4. $ cd git_init
5. $ git init
(成功后提示
Initialized empty Git repository in
D:/.../git_learning/git_init/.git/)
注:.git文件夹是隐藏的,当中储存的是与本地库相关的子目录
和文件,不要删除也不要乱修改,否则将失去git功能
1.0.3 git窗口快捷键
shift + ins 粘贴
ctrl + ins 复制(选中即复制)
alt +f3 搜索
alt +f8 重置
git help (command)来查看命令的用法
(会在浏览器打开本地html文档)
方向上下键:上一条/下一条执行的命令
1.1 设置签名
1.1.0 形式
- 形式:
name:tom
email:helloworld@hl.com - 作用:区分不同开发人员的身份
- 辨析:这里设置的用户和邮箱只在自己本机生效,和github无关。
如果要想链接到github,就需要设置与github注册时相同的name和email(重要,在第二章提交代码到github的时候,如果系统级别的用户名和邮箱与github对应不上的话,会出现time out访问超时错误,非常坑!!!所以强烈建议在这一步直接将global设置为你自己的github名字与邮箱!!!!!
1.1.1命令
1. 项目级别/仓库级别
$ git config user.name tom
$ git config user.email helloworld@hl.com
信息保存在.../.git/config文件中,使用cd和cat查看
操作和结果:
$ cd .git
$ cat config
[core]//(default setting)
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
(->)[user](<-)
name = tom
email = helloworld@hl.com
2. 系统用户级别
$ git config --global user.name tom_pro
$ git config --global user.email helloworld_pro@hl.com
信息保存在~/.gitconfig文件中,使用cd~和cat查看
操作和结果:
$ git config --global user.name tom_pro
$ git config --global user.email helloworld_pro@hl.com
$ cd ~
$ cat .gitconfig
[user]
name = tom_pro
email = helloworld_pro@hl.com
3. 两者优先级
- 就近原则:项目级别优先于系统级别
- 如果只有系统级,则使用系统级
- 两者都没有就报错
1.2 添加提交以及查看提交状态
1.2.0 命令
% git status
查看当前仓库、缓冲区、工作区的文件
- 安装时默认选择了vim,可以在git bash中执行vim命令
- 例:% vim good.txt(新建txt文件)
临时补习vim命令:
退出:先exc退出插入模式,然后英文冒号加wq回车
将新建的文件加上追踪,并加入到暂存区
$ git add +文件名
将文件从暂存区取出并取消跟踪
如果想要添加文件夹,请注意被添加的文件夹内不能有.git/隐藏文件,有的话要删掉,不然无法add到暂存区,而是报错
$ git rm --cached +文件名
将文件从暂存区提交到仓库
$ git commit +文件名
之后进入提交注释区(vim编辑器)
键入
:set nu //显示行号
i //进入编辑模式
(你要写的注释)
:wq //写入退出
执行结果
[master (root-commit) 581791a]
My first commit.New file main.c:
1 file changed,0 insertions(+), 0 deletions(-)
create mode 100644 main.c
对结果的初级理解:
root-commit :根提交
581791a:版本号
更改文件后,使用git status可以看到修改过的文件前面有modified标注,说明已经追踪到文件修改
此时使用git add会更新暂存区,
使用git checkout -- +文件名 丢弃修改
使用git commit -a 直接提交到本地库
使用git commit -m"..." +文件名 不用进入vim直接提交注释
1.3 版本穿梭
先使用 $ git log查看版本号
多行翻页控制:空格向下翻页,b向上翻页,q退出
$ git log
commit 2a813dad4a8e29f709b0d3530cd42ce16a98b485
(HEAD -> master)//当前
Author: tom <helloworld@hl.com>
Date: Sat May 15 18:49:49 2021 +0800
good.txt
commit b04da05f0a981f982df5ec47a404df99e431a4a9
Author: tom <helloworld@hl.com>
Date: Sat May 15 18:47:19 2021 +0800
My second commit
commit 581791aa1db546b2b0f3cb0e48d835653f0ed043
Author: tom <helloworld@hl.com>
Date: Sat May 15 18:33:22 2021 +0800
My first commit.New file main.c:
说明:一长串的数字是哈希值
也可以使用$ git log --pretty=oneline更加简洁
$ git log --pretty=oneline
2a813dad4a8e29f709b0d3530cd42ce16a98b485
(HEAD -> master) good.txtii
b04da05f0a981f982df5ec47a404df99e431a4a9
My second commit
581791aa1db546b2b0f3cb0e48d835653f0ed043
My first commit.New file main.c:
$ git log --oneline更更简洁(但是只显示比HEAD旧的版本,不显示新版本)
$ git log --oneline
2a813da (HEAD -> master) good.txtii
b04da05 My second commit
581791a My first commit.New file main.c:
使用$ git reflog来查看要恢复的步数
$ git reflog
2a813da (HEAD->master) HEAD@{0}: commit: good.txtii
b04da05 HEAD@{1}: commit: My second commit
581791a HEAD@{2}: commit (initial):
My first commit.New file main.c:
更改版本就是更改HEAD的指向
使用$ git reset --hard +(hash key)来选去到的版本
$ git reflog
2a813da (HEAD -> master) HEAD@{0}: commit:
good.txtii
b04da05 HEAD@{1}: commit: My second commit
581791a HEAD@{2}: commit (initial):
My first commit.New file main.c:
$ git reset --hard b04da05
HEAD is now at b04da05 My second commit
其他方式:
- ^运算符:只能往回退
$ git reset --hard HEAD^( 有几个^就退几步) - ~ 运算符:只能往后退,~(num)表示后退的步数
$ git reset --hard HEAD~3 ==
$ git reset --hard HEAD^^^
reset三个参数
--soft :仅仅在本地库移动HEAD (在 $git status 中显示为绿色的modified)
--mixed :在本地库移动HEAD且重置暂存区(在$ git status 中显示为红色的modified)
--hard:在mixed基础上重置工作区
1.4 删除文件
1.4.0 永久删除文件后找回
使用$ rm (filename)删除文件(文件需在之前被提交到库中),会在status中显示为红色deleted
之后$ git commit -m"..." filename,在本地库中就会记录下删除的版本
使用reflog查看,使用reset --hard +(previous hash key)来恢复文件
实例
$ touch abc.txt
$ vim abc.txt(略)
$ cat abc.txt
hello
$ git add abc.txt
$ git status
$ git commit -m"text remove" abc.txt
[master bf7a0d4] text remove
1 file changed, 15 insertions(+)
create mode 100644 abc.txt
$ git status
On branch masternothing to commit, working tree clean
$ rm abc.txt
$ git status
On branch masterChanges not staged for commit:
deleted: abc.txt
no changes added to commit
$ ll
total 1
-rw-r--r-- 1 ahrismile 197121 141 May 16 09:38 main.c
$ git commit -m"delete abc.txt" abc.txt
[master fce297c] delete abc.txt
1 file changed, 15 deletions(-)
delete mode 100644 abc.txt
$ git status
On branch master
nothing to commit, working tree clean
$ git reflog
fce297c (HEAD -> master) HEAD@{0}:
commit: delete abc.txt
bf7a0d4 HEAD@{1}: commit: text remove
981be7d HEAD@{2}: reset: moving to 981be7d
581791a HEAD@{3}: reset: moving to 581791a
981be7d HEAD@{4}: commit: text for history
b04da05 HEAD@{5}: reset: moving to b04da05
2a813da HEAD@{6}: commit: good.txtii
b04da05 HEAD@{7}: commit: My second commit
581791a HEAD@{8}: commit (initial): My first commit.
New file main.c:
$ ll
total 1
-rw-r--r-- 1 ahrismile 197121 141 May 16 09:38 main.c
$ git reset --hard bf7a0d4
HEAD is now at bf7a0d4 text remove
$ cat abc.txthello$ git reset --hard fce297c
HEAD is now at fce297c delete abc.txt
当文件在删除后未提交到本地库,那么只需要调整指针指向HEAD即可
1.5 比较文件
$ git diff (filename)暂存区和工作区进行比较
使用add后就不会看到区别
这时使用% git diff HEAD (filename)就又能看到区别
使用% git diff HEAD ^ (filename)还可以和历史版本进行比较
不指定文件名的时候比较工作区中所有的文件
1.6 分支管理
1.6.1 分支的好处
- 同时并行推进多个功能开发,提高开发效率,
- 各个分支在开发过程中,如果一个分支开发失败,不会影响其他分支,失败的分支删除后重新开始即可
1.6.2 分支操作
使用$ git branch -v 查看所有的分支
使用$ git branch (branchname)创建新的分支
$ git branch text
$ git branch -v
* master bf7a0d4 text remove
text bf7a0d4 text remove
使用$ git checkout (branchname)来切换分支
(可以用tab键自动补全branchname)
合并分支
- 切换到要被合并的接受修改的分支
- 执行merge (branchname)
实例
.../d/workplace/git_learning/git_init (text)$ git branch -v
master bf7a0d4 text remove
* text bf7a0d4 text remove
.../d/workplace/git_learning/git_init (text)$ vim abc.txt(略)
.../d/workplace/git_learning/git_init (text)$ git commit -m "text" abc.txt
[text 7d00a0a] text1 file changed, 1 insertion(+), 1 deletion(-)
.../d/workplace/git_learning/git_init (text)$ git status
On branch textnothing to commit, working tree clean
.../d/workplace/git_learning/git_init (text)$ git branch -v
master bf7a0d4 text remove
* text 7d00a0a text
.../d/workplace/git_learning/git_init (text)$ git checkout master
Switched to branch 'master'
.../d/workplace/git_learning/git_init (master)$ git merge
textUpdating bf7a0d4..7d00a0aFast-forwardabc.txt | 2 +-1 file
changed, 1 insertion(+), 1 deletion(-)
.../d/workplace/git_learning/git_init (master)$ cat abc.txt
helloh ######### //edited by text
解决冲突
在不同分支中对同一处进行不同修改后合并,会产生冲突,这时自动合并会失效,进入手动合并(merging)状态。此时查看目录不会产生新的文件,但是在冲突的文件的冲突行,会产生标识,
例
<<<<<<< HEAD
d edited by text for conflict
=======
d edited by master for conflit
>>>>>>> master
illustration:HEAD 指的是当前分支的内容等号下面是合并分支的内容。
解决方法:
- 使用vim进行删除保存,
- 使用add命令标记已解决,
- 使用commit -m"..." (不加文件名)来退出merging模式
使用$ git branch -d (branchname)删除分支
要删除未合并的分支,会提示使用 -D
1.7 hash算法简介
哈希是一种加密算法,
不同哈希算法的共同点:
- 不管数据如何,得到的结果长度相同
- 哈希算法和输入确定,则输出一定
- 哈希算法确定,输入变化,那么输出一定变化,而且通常变化很大
- 哈希算法不可逆
git 底层使用的是SHA-1算法
用于验证文件有无修改、损坏
1.8 git版本数据管理机制
Git把数据看作是小型文件系统的一组快照。每次提交史新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git的工作方式可以称之为快照流。
本质是创建和移动指针
历史文件用父节点链表链接,不同的分支指向不同的结点,head指向分支指针,每次切换分支就是切换指针,每次版本回溯就是移动指针指向不同的结点,合并分支就是合并不同的结点。
2. Github
2.0 Github账号创建
需要一个邮箱地址和一个未占用的名字
2.1 github 头像修改
在profile里修改
2.2 创建远程库
右上角的加号,选择new repository 填入仓库名称,选择公有或私有,readme 文件自己选择
2.3 在本地创建远程库地址别名
在repository上面选择http格式的网站复制
然后在git bash中使用
% git remote -v 查看当前保存的所有地址以及别名
% git remote add (nickname) (website) 为网址起别名并保存
例
.../d/workplace/git_learning/github (master)$ git remote -v
.../d/workplace/git_learning/github (master)$ git remote add origin
https://github.com/.../git_learing.git
.../d/workplace/git_learning/github (master)$ git remote -v
origin https://github.com/.../git_learing.git (fetch)
origin https://github.com/.../git_learing.git (push)
2.4 推送命令
$ git push (nickname) (branchname)
将分支推送到远程库里
例
$ git push origin master
info: please complete authentication in your browser...
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 213 bytes | 213.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/.../git_learing.git
* [new branch] master -> master
需要在浏览器中输入账号密码,可能有点慢,等等就好,在上面成功信息出来前不要关闭浏览器登录窗口,否则会发生错误
如果不能确定自己是否能链接到github,在Windows系统中进入cmd,使用ping命令即可得到相关信息
例
C:\Users\ahrismile>ping github.com
正在 Ping github.com [52.74.223.119] 具有 32 字节的数据:
来自 52.74.223.119 的回复: 字节=32 时间=51ms TTL=41
来自 52.74.223.119 的回复: 字节=32 时间=55ms TTL=41
来自 52.74.223.119 的回复: 字节=32 时间=48ms TTL=41
来自 52.74.223.119 的回复: 字节=32 时间=50ms TTL=41
52.74.223.119 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 48ms,最长 = 55ms,平均 = 51ms
如果出现
fatal: unable to access 'https://github.com/.../git_learing.git/':
Failed to connect to github.com port 443: Timed out
上网查的都是废话,直接去检查你在第一章第二节设置的global变量有没有对应到你github的名字和邮箱,不同的话赶紧修改
2.5 克隆操作
需要在repository的code选项展开复制clone地址,和push地址是不一样的!
命令:$ git clone (clone address)
例
.../d/workplace/git_learning $ mkdir multi
.../d/workplace/git_learning $ cd multi
.../d/workplace/git_learning/multi$ git initInitialized empty Git repository in
D:/workplace/git_learning/multi/.git/
.../d/workplace/git_learning/multi (master)$ git clone
https://github.com/.../git_init.gitCloning into
'git_init'...remote: Enumerating objects: 18, done.remote:
Counting objects: 100% (18/18), done.remote: Compressing objects:
100% (12/12), done.remote: Total 18 (delta 1), reused 18 (delta
1), pack-reused 0Receiving objects: 100% (18/18), done.Resolving
deltas: 100% (1/1), done.
下载下来的是一个文件夹,文件夹中有.git文件夹,所以不需要初始化就可以直接使用git功能(不要在上一级目录git init,没用),也初始化好了remote的地址和别名,也不需要再设置了。
总结起来就是三个效果
- 下载好文件
- 配置好remote别名(配置远程库)
- 配置好git(初始化本地库)
错误预警:可能会链接不到clone网站,Stack Overflow上有人说可以将clone地址前面的https改为git,本人未尝试过,特此说明。
2.6 邀请别人加入团队
在repository的setting中选择manage access,此时可能需要你输入密码,然后可以进入邀请界面,点击invite a collaborator ,输入被邀请者的邮箱地址,复制邀请链接发送给被邀请人(被邀请人的邮箱此时也会收到github发送的邀请邮件),被邀请人点击链接或复制链接到浏览器打开就可以进入接受邀请界面,完成后被邀请人就成为了团队成员
另话:如何在别人的电脑上登录自己的git?
去到Windows凭据管理器把github的凭据删了重新在git bash界面登录就好。
2.7 拉取pull操作
pull = fetch + merge
pull的时候注意远程仓库的分支名字,不要弄错了
如果是两个不同的文件夹用同一个库,除了clone之外,还可以使用$ git pull --allow-unrelated-histories来获取远程库,否则报错
如果害怕冲突过多,就使用fetch浏览更改后再merge
命令: $ git fetch (远程库地址别名) (远程分支名)
只是下载库并创立一个新的分支,不会更改本地工作区的文件
切换分支即可看到下载的新的内容
然后去到本地master分支使用 $ git merge (远程库地址别名)/(远程分支名) 命令就可以合并fetch下来的内容
当修改的数据不太可能会产生太多冲突的时候
直接 $ git pull (远程库地址别名) (远程分支名)
git就会自己合并内容
别名默认是origin,如果是自己的库,别名自己早就起好了,不需要更改,忘了就用remote -v命令查看;如果是别人的库,clone下来的时候git就自己帮你配置好了,也不用纠结不知道地址别名怎么办
2.8 协同开发的冲突解决
如果本地库比远程库落后版本,那么在本地库的代码是push不到远程库的,这个时候需要先把远程库的代码pull下来,合并冲突(见 1.6),确保本地版本领先于远程库版本后才能push,否则github会拒绝push
2.9 跨团队协作操作
先复制远程库的地址发给团队外的人
以他人的身份登录github后在浏览器复制粘贴远程库的地址,然后打开,点击fork,github会自动完成剩余工作
下面以团队外的人为“我”进行阐述:
我fork之后,得到属于我自己的远程仓库,这个仓库和我好朋友的仓库是一模一样的,我在本地git中clone属于我的仓库(记得拿到clone地址)而且因为进行的是写的操作,所以在git bash中不需要登录github。我在本地完成好朋友委托的任务之后,直接push到我自己的远程库。然后进入到我自己的github库中,点击pull request 、new pull request (这时会看到自己的更改)、create pull request,写更改消息后即完成。
回到邀请人的视角:
我接受到我好朋友的pull request,去到pull request选项,可以给好朋友发消息(conversation),可查看提交(commits),可以查看更改文件(file changed).审查完后没有问题,回到conversation点击merge pull request,添加合并信息即可。
最后拉取远程库到本地,就可以得到好朋友的帮助代码了。
2.10 SSH免密登录
进入当前用户的家目录
$ cd ~
删除.ssh目录
$rm -r .ssh
运行命令生成.ssh密钥目录(重要)
$ ssh-keygen -t rsa -C (邮箱地址)[注意:这里-C这个参数是大写的C],其他的直接全部回车,表示保持默认操作
进入.ssh目录查看文件列表
$ cd .ssh
$ ll
查看id_rsa.pub文件内容
$ cat id_rsa.pub
复制id_rsa.pub文件内容,登录 GitHub,
点击用户头像→Settings→SSH and GPGkeys
New SSH Key
输入复制的密钥信息
之后在本地创建ssh remote
$ git remote add origin_ssh (仓库的ssh地址)
$ git remote -v 查看
之后就可以用ssh来pull、push代码
例
$ mkdir pratice
$ cd pratice/.../d/workplace/git_learning
$ git pull origin masterfatal: not a git repository
(or any of the parent directories): .git //错误示范...
$ git initInitialized empty Git repository in
D:/workplace/git_learning/pratice/.git/
.../d/workplace/git_learning/pratice (master)$ git pull origin
masterfatal: 'origin' does not appear to be a git repository hello
githubfatal: Could not read from remote repository.Please make
sure you have the correct access rightsand the repository
exists.//错误示范:没有建立ssh...
/d/workplace/git_learning/pratice (master)$ git remote add
origin_ssh git@github.com:.../git_learing.git//add ssh
.../d/workplace/git_learning/pratice (master)$ git remote -v
origin_ssh git@github.com:.../git_learing.git (fetch)
origin_ssh git@github.com:.../git_learing.git (push)//查看ssh
.../d/workplace/git_learning/pratice (master)$ git pull origin_ssh
masterremote: Enumerating objects: 9, done.remote: Counting
objects: 100% (9/9), done.remote: Compressing objects: 100% (6/6),
done.remote: Total 9 (delta 1), reused 9 (delta 1), pack-reused
0Unpacking objects: 100% (9/9), 7.48 KiB | 294.00 KiB/s, done.From
github.com:.../git_learing* branch master ->
FETCH_HEAD* [new branch] master -> origin_ssh/master
//通过ssh拉取远程库
.../d/workplace/git_learning/pratice (master)$ ll
total 21
-rw-r--r-- 1 ahrismile 197121 13 May 16 17:08 a.txt-
rw-r--r-- 1 ahrismile 197121 17501 May 16 17:08 git.md//确实拉取成
功
.../d/workplace/git_learning/pratice (master)$ vim a.txt//修改
.../d/workplace/git_learning/pratice (master)$ git add a.txt
.../d/workplace/git_learning/pratice (master)$ git commit a.txt
[master bab51cd] hello github 1 file changed, 1 insertion(+)
.../d/workplace/git_learning/pratice (master)$ git push origin_ssh master
Enumerating objects: 5, done.Counting objects: 100% (5/5),
done.Delta compression using up to 8 threadsCompressing objects:
100% (2/2), done.Writing objects: 100% (3/3), 293 bytes | 293.00
KiB/s, done.Total 3 (delta 0), reused 0 (delta 0), pack-reused 0To
github.com:.../git_learing.gitcc78f34..bab51cd master ->
master//ssh 提交
3. vscode中git的使用
3.1 安装
在vscode安装如下插件:git extension pack gtihub pull requests
然后在本地设置好远程仓库的ssh,就大功告成,之后点击vscode左边的git图标就可以完成相应的git命令
3.2 操作栏界面
操作栏:源代码管理,commits,repositories,file history;branches;remotes;stashes;tags;search & compare;
3.3 源代码管理栏
- 加号:add;
- 返回:放弃更改;
- 刷新;视图;
- 对号:提交;
- 时钟:历史记录;
- 三点:更多操作
- 在‘消息’栏中填写的消息即为commit的消息
3.4 commits栏
- push 推送
- pull 拉取
- fetch 抓取
- switch to another branch 切换分支
- refresh, 刷新
- fold all, 折叠所有文件
- more operationn; 更多操作
3.5 repository栏
repositories 操作:
- push
- pull
- fetch
- refresh
- fold all
- more
- add to favorite; 添加到收藏
3.6 file history、branches、stashes、remotes、tags、search & compare栏
- file history:顾名思义;
- branches: create a new branch , switch to another branch;
- remotes: view your remote repositories(include branches and files),add new remote(会在上方提示你输入远程地址别名和远程地址);
- stashes git_stash
- tags: 标签(大版本更新使用)
- search & compare:通过提交的信息、作者、hash值、改变来寻找提交;通过分支、标签和其他来比较
在vscode终端中可以开启git bash,vscode的版本控制我现在还没弄清楚(版本回溯只能回溯到上一个版本?),所以在终端中使用git bash还是挺需要的,但是要注意这个终端的功能是不完全的(比如选中即复制是不存在的),其他还好,有时间继续探索,有条件的就去github vscode那里读读相关文件说明
- 注意在.gitignore.txt中选择忽略.vscode/文件夹
3.7 其他
- .gitignore文件不起作用
- Git报错-refusing to merge unrelated histories
- git warning: refname 'HEAD' is ambiguous
4.eclipse 中使用git
4.1 Eclipse中的git插件
在Windows->Preference->Version Control(team)->Git可以找到
点击Git下的Configuration可以看到自己配置的参数
4.2 把工程初始化为本地库、设置签名范围
- 在project下右键->team->share project(->Git)->点击第一个勾->finish
此时git仓库即创建成功,在Windows->Preference->Version Control(team)->Git->Configuration->Repository Settings下就可以看到新建的库 - 在上述界面中点击右边的add entry,在key位置依次输入user.name 和 user.email;在value位置输入对应的值,即可设置签名
4.3 git操作
在project右键->team->commit(快捷键ctrl+#);此时会在下方弹出Git Staging窗口,把Unstaged Changes窗口中的文件拖到Staged Changes中即可完成add操作;Commit Message窗口填写提交信息
特别注意:只要追踪需要的文件就好了,其他的IDE生成的配置文件千万不要追踪,否则将会给自己和别人维护代码带来极高的麻烦
4.4 .gitignore文件
参照表:github里面搜索gitignore即可看到各种语言的建议忽略文件
在eclipse下要添加 .classpath, .project, .settings, target
可以在用户根目录下的.gitconfig文件中添加:
[core]
excludesfile=(filepath)
//filepath填写.gitignore文件的绝对路径,**一定是正斜杠**!!
4.5 本地库操作
project右键->team->add to index 添加到缓存区
4.6 推送到远程
project->team->remote(必须先配置本地库),之后填入仓库地址,next,add all Branches Spec
4.7 克隆远程库工程
在Project Explorer空白处右键import->Git->Project from Git->Clone URL->填入URL和账号密码->改目录->import as general project->右键Project->Configure->Convert to Maven Project
4.8 解决冲突
Project右键->Team->merge tool
可以把本地内容与远程库内容进行对比
5. Git工作流
集中式工作流、GitFlow式工作流、Forking工作流
最好的是GitFlow式,即不同的分支,同时推进,必要时merge
6. Gitlab服务器搭建
(需要虚拟机,而且现在不需要,一般都是公司或团体用
最后说一句,其实在想要建立git的地方会有git GUI here的选项,其实就是图形化界面,学完以上的命令行之后,就可以更加灵活的使用git的图形界面啦
本文来自博客园,作者:ahrismile,转载请注明原文链接:https://www.cnblogs.com/ahrismile/p/15086837.html

浙公网安备 33010602011771号