篇幅较长, 右面有目录, 可跳转查看
1. Git 和 Github基本概念
Git
Git 是目前业界最流行的版本控制系统(Version Control System),一个开源的分布式版本控制系统
Git 作为一个开源项目,其代码本身就被托管在 GitHub 上,如果您感兴趣,可以上去一观其真容。Git 项目地址:https://github.com/git
Github
GitHub 本质上是一个代码托管平台,它提供的是基于 Git 的代码托管服务
2. 前期准备
- 在Github网站注册自己的账号
- 下载安装Git
- 在官网下载:https://git-scm.com/downloads
Git-2.21.0-64-bit.exe
- 安装: 默认下一步 到 安装完成
3. 使用Github
1.新建仓库(repository)
2.克隆项目(这里使用的是SSH,类似于Linux的公钥密钥)
- 1.检查现有的ssh密钥
- 打开Git Bash
- 输入
ls -al ~/.ssh
以查看是否存在现有的SSH密钥
- 2.(若不存在)则生成新的密钥
- 在Git Bash输入
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
, 然后三次回车
- 在Git Bash输入
- 3.向GitHub帐户添加新的SSH密钥
- 1.在Git Bash输入
clip < ~/.ssh/id_rsa.pub
(也可以到此路径下手动复制) - 2.在Github网站中add new ssh keys, 输入已经拷贝到剪切板(输入上面那个命令不报错的话就已经拷贝到剪切板了)的密钥
- 3.在本地打开Git Bash, 输入
git clone <自己的项目地址> <directory可选目录>
, 就可以把项目拷贝到本地(当前目录, 即打开Github的目录)了
- 1.在Git Bash输入
4. Git基础(上传项目)
1. Git概念
- 工作区:就是你在电脑里能看到的目录
- 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
2. 工作区目录
3.学习上传
1. 上传
- 新建HelloWorld.txt文件(假装是被编辑过的项目代码)
- 在项目目录下(或cd到)打开Git Bash, 输入
git status
此时, 被修改的文件在工作区 - 添加到暂存区
git add HelloWorld.txt
- 提交到Git仓库
git commit -m 'a first commit'
(参数-m为提交时的信息message)
此时提示我们要确认身份(提交用户名和邮箱) - 设置用户名和邮箱并提交
git config --global user.email "邮箱号"
git config --global user.name "用户名"
git commit -m 'a first commit'
- 使用“git push”发布本地提交
git push
(提交前先git pull
, 因为别人可能有更新)
若出现上述情况(可能是因为你修改了用户名或邮箱,被认为是两个人), 用reset, 然后重新提交`
2.查看
查看日志git log
查看某次提交的详细信息git show id号
3.提交有问题, 要reset
git reset 676c6cf3c6eb66452c65240736114eb23545c1f0
(要保留的id号)
然后重新上传就行了
5. 解决冲突
1.模拟两个人共同开发,导致冲突
1. 重新克隆一份项目(假装是另一个同事修改的) git clone git@github.com:user-h/TestGit.git(项目地址) TestGit2(保存目录)
2. 修改TestGit2目录下HelloWorld.txt文件并提交(提交步骤见上面(修改username或email),[失败的话,用reset回滚??])
3. 修改TestGit下HelloWorld.txt的内容,提交(git add HelloWorld.txt
git commit -m 'lltz commit 1'
)
提示你已经不是最新的了, 请先使用git pull整合
2. 解决
1. 使用git pull
执行之后,提示 自动合并冲突文件. 此时TestGit下的HelloWorld.txt变为
2. 此时手动修改文件并在次提交git add HelloWorld.txt
git commit -m 'merge commit 1'
git push
6. 多分支开发
在同一分支上开发会导致不停地解决冲突,所以团队协作时需要多分支开发
1.创建分支git branch branch1
切换分支 git checkout branch1
2.编写代码
新建文件HelloWorld.java
class Demo{
public static void main(String[] args){
System.out.println("Hello Java");
System.out.println("Hello World");
System.out.println("Hello Git");
}
}
3.提交:
git add HelloWorld.java
git commit -m 'helloworld'
git push
此时会提示没有远程的分支,需要设置远程分支git push --set-upstream origin branch1
(这时从网友Github也可以看到多分支)
4.模拟另一个分支
- 把HelloWorld.java拷贝到TestGit2,并做相应修改(假装是另一个同事的编辑)
- 剪出并创建新的分支
git checkout -b 'branch2'
(相当于创建 切换两个命令) - 上传:
git add .
git commit -m 'helloworld'
git push --set-upstream origin branch2
5.合并发布
- 先回到master分支
git checkout master
- 因为可能有人更新代码,所以先拉取一下:
git pull
把分支1合并到master:git merge branch1
git push
对分支2执行同样操作git checkout master
git pull
git merge origin/branch2
git push
(此时还是会出现冲突,需要合并)
7. 使用ide快速解决冲突
1.项目导入idea
2.解决冲突
右键项目 -> Git -> Resolve Conflicts(尝试解决冲突) -> 双击Modified
不同步.idea 修改.gitignore文件,加入.idea/
快速修改完成后 git add .
git commit -m 'finish'
git push
OK, 结束
附.创建仓库(使用一个已经存在的目录作为Git仓库)
1.使用当前目录作为Git仓库,我们只需使它初始化:git init
(git init <指定目录>
)
2.目录下文件纳入版本控制git add .
(git add *.java
所有java后缀的文件)
3.提交git commit -m '初始化项目版本'
4.连接到远程仓库,并将代码同步到远程仓库
git remote add origin 远程仓库地址
连接到远程仓库并为该仓库创建别名 , 别名为origin . 这个别名是自定义的,通常用origingit push -u origin master
由于新建的远程仓库是空的,所以要加上-u这个参数, 非空后git push origin master
即可
创建一个 upStream (上传流),并将本地代码通过这个 upStream 推送到 别名为 origin 的仓库中的 master 分支上
-u ,就是创建 upStream 上传流,如果没有这个上传流就无法将代码推送到 github;同时,这个 upStream 只需要在初次推送代码的时候创建,以后就不用创建了
另外,在初次 push 代码的时候,可能会因为网络等原因导致命令行终端上的内容一直没有变化,耐心等待一会就好。
5. 报错, 由于你新创建的那个仓库里面的README文件不在本地仓库目录中,这时我们可以通过以下命令先将内容合并一下git pull --rebase origin master