文章目录
Git基础命令
1、设置用户签名
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。首次安装必须设置,否则无法提交代码。这里设置的用户签名和代码托管中心的账号没有任何关系
git config --global user.name PengHuAnZhi
#Git并不会验证此邮箱,也不会去校验邮箱的真实性
git config --global user.email penghuanzhi@pwrd.com
2、初始化本地库
定位到项目根目录
$ git init
Initialized empty Git repository in E:/Git Repository/Git-Demo/.git/
3、查看本地库状态
$ git status
On branch master#当前处于master分支
No commits yet#目前还没有提交
nothing to commit (create/copy files and use "git add" to track)#也没有任何需要提交的东西
当前目录新建一个文件
hello.txt
,再次查看状态
$ git status
On branch master
No commits yet
Untracked files:#未被追踪的文件,目前还只是在工作区,还没有提交到暂存区
(use "git add <file>..." to include in what will be committed)
hello.txt
nothing added to commit but untracked files present (use "git add" to track)
4、添加暂存区
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt#windows换行符为CRLF,提交到暂存区后需要将其转换为Linux下面的换行符LF
The file will have its original line endings in your working directory
再次查看本地库状态
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt
5、移除暂存区
$ git rm --cached hello.txt
rm 'hello.txt'
6、提交本地库
$ git commit -m '第一次提交' hello.txt
[master (root-commit) 3d42b70] 第一次提交
1 file changed, 11 insertions(+)
create mode 100644 hello.txt
再次查看本地库状态
$ git status
On branch master
nothing to commit, working tree clean
修改文件再次提交
$ 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: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")
$ git add hello.txt
$ git commit -m '第二次提交' hello.txt
[master e79f67b] 第二次提交
1 file changed, 11 insertions(+), 11 deletions(-)
$ git add hello.txt
$ git commit -m '第三次提交' hello.txt
[master d3ba9bf] 第三次提交
1 file changed, 11 insertions(+), 11 deletions(-)
7、查看版本信息
$ git reflog
e79f67b (HEAD -> master) HEAD@{0}: commit: 第二次提交
3d42b70 HEAD@{1}: commit (initial): 第一次提交
$ git log
commit e79f67bfe1ddf5cdc8c6c82da72b31b7c77d1fac (HEAD -> master)
Author: PengHuAnZhi <penghuanzhi@pwrd.com>
Date: Mon Oct 4 15:15:59 2021 +0800
第二次提交
commit 3d42b70d442404281dac0fefae28b7740f229d94
Author: PengHuAnZhi <penghuanzhi@pwrd.com>
Date: Mon Oct 4 15:10:44 2021 +0800
第一次提交
8、版本窜梭
$ git reflog
d3ba9bf (HEAD -> master) HEAD@{0}: commit: 第三次提交
e79f67b HEAD@{1}: commit: 第二次提交
3d42b70 HEAD@{2}: commit (initial): 第一次提交
$ git reset --hard e79f67b
HEAD is now at e79f67b 第二次提交
$ git reflog
e79f67b (HEAD -> master) HEAD@{0}: reset: moving to e79f67b
d3ba9bf HEAD@{1}: commit: 第三次提交
e79f67b (HEAD -> master) HEAD@{2}: commit: 第二次提交
3d42b70 HEAD@{3}: commit (initial): 第一次提交
实际上就是
HEAD
指向分支master
,然后master
指向具体的版本号
分支的操作
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
1、创建分支
$ git branch hot-fix
2、查看分支
$ git branch -v
hot-fix d3ba9bf 第三次提交
* master d3ba9bf 第三次提交
3、切换分支
$ git checkout hot-fix
Switched to branch 'hot-fix'
$ git reflog
79b2699 (HEAD -> hot-fix) HEAD@{0}: commit: 在hot-fix分支上第一次修改
d3ba9bf (master) HEAD@{1}: checkout: moving from master to hot-fix
d3ba9bf (master) HEAD@{2}: reset: moving to d3ba9bf
e79f67b HEAD@{3}: reset: moving to e79f67b
e79f67b HEAD@{4}: reset: moving to e79f67b
d3ba9bf (master) HEAD@{5}: commit: 第三次提交
e79f67b HEAD@{6}: commit: 第二次提交
3d42b70 HEAD@{7}: commit (initial): 第一次提交
4、合并分支
- 正常合并
回到
master
分支
$ git merge hot-fix
Updating d3ba9bf..79b2699
Fast-forward
hello.txt | 1 -
1 file changed, 1 deletion(-)
- 异常合并
切换到
hot-fix
分支,对文件进行修改并提交,然后切换回master
分支,再次修改当前文件并提交,然后再次回到master
分支执行合并分支命令
$ git merge hot-fix
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt#合并冲突在hello.txt中
Automatic merge failed; fix conflicts and then commit the result.#自动合并失败
打开文件查看
手动将要保留的内容保存,并将特殊符号给删除掉
重新提交一下
$ git commit -m '第一次处理hot-fix和master分支冲突' hello.txt
fatal: cannot do a partial commit during a merge.#可以看到失败了,因为这里处理冲突后,再次提交不能携带文件名了,因为两个分支都修改过,不知道是哪个分支的文件,这里不应该携带文件名
$ git commit -m '第一次处理hot-fix和master分支冲突'
[master 292003c] 第一次处理hot-fix和master分支冲突
合并成功后是不修改原来的
hot-fix
分支的
Github操作
远程创建一个代码库,名称和本地仓库保持一致
复制
HTTPS
选项下的链接
1、别名
因为仓库的地址链接较长,我们可以起一个别名
#创建别名
$ git remote add git-demo https://github.com/PengHuAnZhi/Git-Demo.git
#查看别名
$ git remote -v
git-demo https://github.com/PengHuAnZhi/Git-Demo.git (fetch)#用于拉取
git-demo https://github.com/PengHuAnZhi/Git-Demo.git (push)#用于推送
2、推送
为了一定的代码提交规范,保证当前位于
master
分支再执行推送
$ git push git-demo master
弹出框,选择通过浏览器登录
之后就可以看到远程仓库提交成功
$ git push git-demo master
Enumerating objects: 19, done.
Counting objects: 100% (19/19), done.
Delta compression using up to 12 threads
Compressing objects: 100% (13/13), done.
Writing objects: 100% (19/19), 1.52 KiB | 520.00 KiB/s, done.
Total 19 (delta 5), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (5/5), done.
To https://github.com/PengHuAnZhi/Git-Demo.git
* [new branch] master -> master
3、拉取
直接在远程仓库修改文件
执行拉取命令
$ git pull git-demo master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 685 bytes | 4.00 KiB/s, done.
From https://github.com/PengHuAnZhi/Git-Demo
* branch master -> FETCH_HEAD
292003c..9e71278 master -> git-demo/master
Updating 292003c..9e71278
Fast-forward
hello.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
4、克隆
git clone https://github.com/PengHuAnZhi/Git-Demo.git
克隆会做三件事情,1、拉取代码;2、初始化本地仓库;3、创建别名(别名默认为
Origin
)
5、跨团队协作
将别的团队的代码拉取到自己的仓库进行更改,且修改记录只存在于自己的仓库,原始仓库不会记录
fork
完毕后可以看到项目下方有明显标注来源
在
fork
后的新项目中提交更改,原始仓库是不会有任何记录的,我们如果需要让这些更改同步到远程仓库,可以创建一个Pull requests
最后就可以填写我们
Pull requests
的详细信息了,最后点击Create pull request
即可,原始仓库管理员既可以查看更改,以及选择是否合并
6、SSH免密登录
在
Windows
用户主目录(如:C:\Users\Administrator
)下Git bash here
#-t 指定加密算法,rsa著名的非对称加密算法
#-C 备注
$ ssh-keygen -t rsa -C penghuanzhi@pwrd.com
直接敲三次回车,不需要输入内容,然后就可以看到当前文件夹中生成了一个
.ssh
隐藏文件夹,其中
- id_rsa:私钥
- id_rsa.pub:公钥
此时将公钥内容复制,回到
Github
,进入当前用户的settings
,找到SSH and GPG keys
创建一个
SSH key
,将刚才复制的公钥填入,添加即可
这时候就可以复制仓库的
SSH
版本的链接,回到本地克隆,即可达到不用输入密码即可登录
IDEA集成Git
1、配置Git忽略文件
与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽
IDE
工具之间的差异,在用户的家目录下面新建一个文件命名为git.ignore
,内容模板如下
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
然后在用户家目录下面找到一个
.gitconfig
的隐藏文件,编辑,在后面新增如下内容,注意使用正斜线,而不是反斜线
[core]
excludesfile = C:/Users/Administrator/git.ignore
2、定位Git程序
3、初始化本地库
选择当前项目创建一个
Git
仓库,添加完毕后,红色文件表示未被追踪并添加到暂存区,灰色文件表示被忽略,绿色表示已被添加到暂存区
将未被追踪的文件添加到暂存区中
4、提交本地库
5、切换版本
修改文件,提交,重复两次,然后将版本信息展示
在需要切换的版本上面右击选择
checkout
6、切换分支
需要切换点击
checkout
即可
7、合并分支
在
hot-fix
分支上修改内容提交本地仓库,然后切换回master
分支同样修改内容提交本地仓库,黄色是HEAD
指针,绿色是master
指针
然后在
master
分支上点开Git Branches
,在待合并分支上选择Merge into Current
如果没有冲突,直接就合并成功,但当前我们有冲突,会弹出如图所示的页面,提示我们冲突需要处理
然后我们点击
merge
,我们可以在弹出来的页面进行合并操作
这里我选择将两次修改都添加(视具体情况而定),然后
Apply
即把冲突解决完毕
IDEA集成Github
1、添加Github账号
点击
Add Account
会跳转Github
登录页面,同意即可登录(以前是需要输入账号密码或者SSH
进行登录的,但是据说2021年8月14日起就不允许通过账号密码进行git
操作了,所以现在更加的便捷)
2、分享项目到Github上
点击
Share
后就可以在远程库看到了
3、推送
4、拉取
远程手动修改
5、克隆
备注
同理,
IDEA
去集成Gitee
和GitLab
都是差不多的,只需要到插件市场下载对应的插件即可