文章目录
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/93a625aff34f6a6ddb48e7fb7f6f23b0.png#pic_center)
一、Git命令
如果出现了下面的报错,是因为复制粘贴时 git 前面不小心多加了个空格,算了个字符就会报错,删掉即可解决。
bash: $'\302\203git': command not found
基于开发命令中常用的git命令
1.2 设计用户签名
-- git config --global user.name 用户名
git config --global user.name ffideal
-- git config --global user.email 邮箱
git config --global user.email 1359975xxx@qq.com
1.3 初始化本地库
git init
1.4 查看本地库状态
哪个分支、哪些文件、只要库被修改且未被追踪工作区
git status
测试结果
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
....
修改一个文件之后
$ 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.java
no changes added to commit (use "git add" and/or "git commit -a")
1.5 添加至暂存区
-- git add 文件名
git add hello.java
1.6 从暂存区删除
git rm --cached hello.java
注意:工作区中 hello.java
还在的
1.7 将暂存区的文件提交到本地库
-- git commit -m "日志信息" 文件名
git commit -m "我的第一个提交的java文件" hello.java
测试结果
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git commit -m "我的第一个提交的java文件" hello.java
[master (root-commit) cbe2bf8] 我的第一个提交的java文件
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hello.java
1.8 查看版本信息
-- 查看版本日志信息
git log
-- 查看版本详细日志信息,包括版本号、提交者、日期、日志信息
git reflog
测试结果
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$git creflog
cbe2bf8 (HEAD -> master) HEAD@{0}: commit (initial): 我的第一个提交的java文件
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git log
commit cbe2bf893a34fa9790374af38260b6bcf272137f (HEAD -> master) -- 版本号
Author: FFIDEAL <xxxxx@qq.com> -- 提交者
Date: Fri Oct 14 19:29:18 2022 +0800 --日期
我的第一个提交的java文件 -- 日志信息
⑧ 版本穿梭(切换不同的版本)
git reset --hard cbe2bf893a34fa9790374af38260b6bcf272137f
测试结果
HEAD is now at cbe2bf8 我的第一个提交的java文件
这命令可以让指针指向相应的软件版本
比如,提交修改后的 hello.java
文件
$ git commit -m "修改后的hello.java" hello.java
[master 0289986] 修改后的hello.java
1 file changed, 1 insertion(+)
查看日志,可以发现版本号是不一样的。这些版本分别是:0289986,cbe2bf8
$ git reflog
0289986 (HEAD -> master) HEAD@{0}: commit: 修改后的hello.java
cbe2bf8 HEAD@{1}: reset: moving to cbe2bf893a34fa9790374af38260b6bcf272137f
cbe2bf8 HEAD@{2}: commit (initial): 我的第一个提交的java文件
此时我们发现,head指针指向0289986,现在我要让他指向cbe2bf8,就可以使用以下命令
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$git reset --hard cbe2bf8
HEAD is now at cbe2bf8 我的第一个提交的java文件
-- 测试结果
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git reflog
cbe2bf8 (HEAD -> master) HEAD@{0}: reset: moving to cbe2bf8 -- 指向了cbe2bf8
0289986 HEAD@{1}: commit: 修改后的hello.java
cbe2bf8 (HEAD -> master) HEAD@{2}: reset: moving to cbe2bf893a34fa9790374af38260b6bcf272137f
cbe2bf8 (HEAD -> master) HEAD@{3}: commit (initial): 我的第一个提交的java文件
此外,在本地,可以进入工作区
方案一:进入 .git
文件夹,在 .git/HEAD
记录了谁提交
方法二:进入 .git/refs/heads/main(用户名)
记录了版本号
在git中,当前版本是用HEAD版本来标识的,前一个版本使用 HEAD^
来表示,上上个版本使用 HEAD^^
来表示。那么前100个版本如何表示呢?我们不可能写100个 ^
,我们有简便写法,那就是 HEAD^100
。用这种简便写法,上上个版本可以这样表示HEAD^2
二、Git分支
分支特性:分支创建、分支转换、分支合并、代码合并冲突解决
一个分支就是一个副本
2.1 查看分支
git branch -v
测试结果
$ git branch -v
* master cbe2bf8 我的第一个提交的java文件
2.2 创建分支
git branch newBranch
测试结果
$ git branch newBranch
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git branch -v
* master cbe2bf8 我的第一个提交的java文件
newBranch cbe2bf8 我的第一个提交的java文件
2.3 切换分支
git checkout newBranch
测试结果
git checkout newBranch
Switched to branch 'newBranch'
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch) -- 测试结果,已经切换至newBranch
2.4 合并分支
-- git merge 分支名
git merge newBranch
测试流程和结果
-- 1,newBranch 分支下修改了hello.java
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ cat hello.java
222 newBranch
111
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ git add .
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ git commit -m "测试冲突newBranch修改了hello.java文件" hello.java
[newBranch ccb3ef2] 测试冲突newBranch修改了hello.java文件
1 file changed, 1 insertion(+), 1 deletion(-)
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ git checkout master
Switched to branch 'master'
-- master 分支下修改了hello.java
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ cat hello.java
222
111 master
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git add .
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git commit -m "测试冲突master修改了hello.java文件" hello.java
[master 5ff3ad3] 测试冲突master修改了hello.java文件
1 file changed, 1 insertion(+), 1 deletion(-)
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git merge newBranch
Auto-merging hello.java
CONFLICT (content): Merge conflict in hello.java --出现了合并冲突
Automatic merge failed; fix conflicts and then commit the result.
查看 hello.java
文件,文件内容如下:
<<<<<<< HEAD
222
111 master
=
222 newBranch
111
>>>>>>> newBranch
我们如下内容,只需要把其他内容删掉
222 newBranch
111 master
<<<<<<< HEAD -- 删除
222 -- 删除
111 master -- 保留
= -- 删除
222 newBranch -- 移动位置
111 -- 删除
>>>>>>> newBranch -- 删除
完成后提交,注意,这里 git commit -m "合并了master和newBranch冲突之后最终得到的hello.java文件"
是不能带文件名的
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master|MERGING)
$ git add .
-- 这里不能带文件名
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master|MERGING)
$ git commit -m "合并了master和newBranch冲突之后最终得到的hello.java文件"
[master 3751ec1] 合并了master和newBranch冲突之后最终得到的hello.java文件
查看提交后的 hello.java
的内容。但是,由于是 master
合并 newBranch
分支的内容,所以在 master
分支下可以看到合并后的内容,但是在 newBranch
分支并没有被修改。这就是为什么在团队合作中,push
提交到远程库之前要 pull
一下远程库的内容,以保持内容的一致性
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ cat hello.java
222 newBranch
111 master
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (master)
$ git checkout newBranch
Switched to branch 'newBranch'
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git (newBranch)
$ cat hello.java
222 newBranch
111
三、GitHub
在 github 上创建一个远程库,我的远程库名称为 git_test
然后把该库 clone 到本地
3.1 代码克隆clone
git clone git@github.com:ffideal/git_test.git
3.2 给库取别名
-- git remote add 别名 远程库
git remote add name git@github.com:ffideal/git_test.git
测试结果
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master)
$ git remote -v
name git@github.com:ffideal/git_test.git (fetch)
name git@github.com:ffideal/git_test.git (push)
origin git@github.com:ffideal/git_test.git (fetch)
origin git@github.com:ffideal/git_test.git (push)
删除别名
-- git remote remove <别名>
git remote remove gitit_nickname
测试结果
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master)
$ git remote -v
git_test git (fetch)
git_test git (push)
gitit_nickname git@github.com:ffideal/git_test.git (fetch) -- 删除目标
gitit_nickname git@github.com:ffideal/git_test.git (push)
name git@github.com:ffideal/git_test.git (fetch)
name git@github.com:ffideal/git_test.git (push)
origin git@github.com:ffideal/git_test.git (fetch)
origin git@github.com:ffideal/git_test.git (push)
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master)
git remote remove gitit_nickname
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master) -- 已被删除
$ git remote -v
git_test git (fetch)
git_test git (push)
name git@github.com:ffideal/git_test.git (fetch)
name git@github.com:ffideal/git_test.git (push)
origin git@github.com:ffideal/git_test.git (fetch)
origin git@github.com:ffideal/git_test.git (push)
3.3 推送本地分支到远程仓库
-- git push 别名 分支
git push origin main
测试结果,注意,如果此时该分支不存在,会被创建分支
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (main)
$ git push origin main
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 560 bytes | 280.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'main' on GitHub by visiting:
remote: https://github.com/ffideal/git_test/pull/new/main
remote:
To github.com:ffideal/git_test.git
* [new branch] main -> main
3.4 拉取远程库
-- git pull 远程库地址or别名 远程分支名
git pull origin master
测试结果
dell@DESKTOP-B06U8EQ MINGW64 /e/github/git/git_test (master)
$ git pull origin master
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), 1.41 KiB | 479.00 KiB/s, done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
From github.com:ffideal/git_test
* branch master -> FETCH_HEAD
bde7239..9edde2f master -> origin/master
Updating cd10529..9edde2f
Fast-forward
...263\250\350\247\243\350\257\246\351\233\206.md" | 80 ++++++++++++++++++++++
1 file changed, 80 insertions(+)
create mode 100644 "\346\263\250\350\247\243\350\257\246\351\233\206.md"
查看文件
$ dir
hello.java main.txt 注解详集.md
3.5 邀请加入团队
① 选择合作者:进入项目 → settings → Manager access → Invite a callaborator
② 填入想要合作的人
③ 复制地址并通过微信等方式发送给该用户
④ 点击接收邀请 Accept invitation
⑤ 成名后,可以在该合作者账号上看到远程仓库
⑥ 可以操作该库
3.6 idea集成GitHub
3.6.1 配置忽略文件
就是在git目录下创建一个文件 xx.ignore
建议是 git.ignore
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
# compiled class file
*.class
# Log file
*.log
# Package Files
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
3.6.2 定位 Git 程序
settings → Version Control → Git → 选择自己的 git.exe 安装目录 → test
3.6.3 集成 Git
VCS → Import into Version Control → Create Git Repository → 选择项目目录(初始化本地库)右击点击项目选择Git → commit directory → 选择删文件以及在commit message 中填写描述 → commit
3.6.4 切换版本
在idea的左下角,点击version control,然后点击log 查看版本 → 右击选择要切换的版本,然后在菜单里点击Checkout Revision
3.6.5 创建分支
Git → Repository → new Branch → 填写分支名称 → 填写之后在 idea 的右下角看到我们新建的分支,说明创建成功,并已经切换到该分支了
3.6.6 切换分支
在 idea 窗口的右下角:master → Checkout → 选择分支xutao → 在右下角看到了xutao即成功
3.6.7 合并分支
Git:master → Merge Selected into Current → 选择要合并的分支
3.6.8 解决冲突
若出现冲突,我们栈在master分支上合并其他分支,出现了文件的不同就会发生冲突。点击 conflicts
框中的 Merge
按钮,手动合并