一、初始化
在github上创建repository后,如何将本地代码关联上远程仓库呢?
create a new repository on the command line --如果新建仓库
echo "# git-demo" >> README.md --在项目中添加README.md文档
git init --初始化本地仓库
git add README.md --将README.md添加到INDEX区(什么是INDEX区?请看下面原理图)
git commit -m "first commit" --提交到本地仓库
git remote add origin https://github.com/gxdbox/git-demo.git --本地仓库关联远程仓库
git push -u origin master --将本地代码推送至远程仓库
push an existing repository from the command line --如果已存在仓库
git remote add origin https://github.com/gxdbox/git-demo.git --本地仓库关联远程仓库
git push -u origin master --将本地代码推送至远程仓库
二、原理图
参数解释
- workspace:本地工作区
- Index:缓存区
- Repository:本地仓库
- Remote:远程仓库
三、分支
- 常用命令:
git branch gxd2 --注意:创建的是本地分支(如有必要,你可以将分支同步到远程仓库)
git checkout -b test01 --相当于git branch test01 + git checkout test01
git push --set-upstream origin test01 --将本地分支推送到远程仓库。
1. origin 表示远程仓库
2. test01 表示分支名称
git branch -r 查看远程分支
git branch 查看当前分支
- 如何拉取分支上的代码?
git branch -a --查看所有分支,选中你所要的分支
git checkout remotes/origin/gxd --切换分支
- 如何提交本地代码到远端分支?
git push <远程主机名> <本地分支名>:<远程分支名>
举例:git push -u origin tst:tst
git push 如果一开始是通过clone下来的代码,就可以直接push
- 如何将分支的新内容merge到master上?
1.将分支merge之前,确保分支为最新版本,所以,需要先切换分支,然后更新代码
git checkout test01 --切换到分支上。代码也会随之改变
git pull --更新代码
2. git checkout master --切换到master上
3. git merge test01 --将test01分支合并到master上
4. git push -u origin master -将本地master代码push到远端
反过来,如果是将master的内容merge到分支上,道理一样,只是调换顺序而已
- 如何切换分支
error: Your local changes to the following files would be overwritten by checkout:
.idea/workspace.xml
Please commit your changes or stash them before you can switch branches.
Aborting
在切换分支之前,请先提交所有文件到本地仓库,否则会切换失败。
git add . 添加所有
git commit -m "ceshi"
git checkout master --在你做checkout之前,默认已经clone了一份代码到你的本地仓库,当你checkout切换时,你的代码也会跟着换
四、标签
- 查看标签
- git tag --查看当前标签
- git log --pretty=oneline --abbrev-commit --找到历史提交的commit id;因为默认标签是打在最新的commit上
- git show <tagname>--查看对应版本
- git checkout <tagname> --查看对应标签状态
- 创建标签
标签默认打在当前版本(打上标签,但此时的标签还在本地,需要你推送到远端仓库)
- git tag <tagname> --创建v1.0.0标签
- git tag -a <tagname> -m "this is message" --可以指定标签信息 +commitId
-
如果你想将标签打在历史上某个版本(打上标签,但此时的标签还在本地,需要你推送到远端仓库)
- git log --pretty=oneline --abbrev-commit--查看历史上的commitId
- git tag -a <tagname> <SHA值> -m "<备注信息>"
举个例子:git tag -a 1.0.0 0c3b62d -m "Release Edition v1.0.0" --为SHA为0c3b62d的这次提交打了1.0发行版的tag
- 删除标签
git tag -d <tagname> --删除本地标签
- 推送标签至远程
git push origin <tagname>
五、回滚
- 按字符串回滚
git log --pretty=oneline --查看命令字符串
--回滚到某个版本git reset --hard 字符串
举例:git reset --hard 'f7f8833ed851e64dc174b266ac667e1ded0fb002'
- 按标签回滚
git tag
git reset --hard 标签名
举例:git reset --hard v1.0.4
6、代码冲突
Auto-merging src/main/java/com/zjrb/gitdemo/TestController.java
CONFLICT (content): Merge conflict in src/main/java/com/zjrb/gitdemo/TestController.java --冲突的类
Automatic merge failed; fix conflicts and then commit the result. --正在提交前,请先拉取最新的版本
两个人修改了同一处代码,如果你不知道该删除哪个,你也可以提交冲突代码,那么,你的另一位同事git pull后,就会得到冲突的代码,把筛选权交给你同事。
git add .
git commit -m "冲突"
git push -u origin 本地分支:远程分支
方法一:舍弃本地代码,远程版本覆盖本地版本
使用这种方法之前,可以先将本地修改的代码备份一下,避免重敲代码。具体命令如下:
$:git fetch --all
$:git reset --hard origin/master
$:git pull
其他
常用命令
- git status --查看状态
- git add --全部提交到缓存区INDEX
- git add . --提交全部到缓存区INDEX
- git add 文件名 --提交某个文件到缓存区INDEX
- git commit -m "message" --提交文件到本地仓库
- git pull --从远端仓库拉去代码,也就是更新代码
- history --查看历史
- git clone https://github.com/gxdbox/git-demo.git --拉取远程代码
- echo "first branch demo" >> branch.txt 将文字写入txt文档中
- gradle clean;如果是gradle项目,提交是需要命令行清除build中的class和jar包,然后在提交代码