git: 分布式的项目(代码)管理软件
一个远程的仓库,多个本地的仓库,团队开发。
Git 准备/使用
下载git 并安装(自行百度)
创建本地仓
桌面右键 gitBash 进入git ,然后 跳转到你要存放仓库的地方(如: cd : d/develop)
$ mkdir git-repository
$ cd git-repository
$ pwd
/d/develop/git-repository
初始化仓库
$ git init
Initialized empty Git repository in D:/develop/git-repository/.git/
设置 用户名
$ git config --global user.name "用户姓名"
$ git config --global user.email "用户邮箱"
简单的使用
1、创建一个文件(Linux 系统下 Shift+连按二次Z Z)
$ vi newfile.txt
2、提交到暂存区 (没有反应的。。.)使用git add -A
或git add .
可以提交当前仓库的所有改动。
$ git add newfile.txt
3、提交至本地仓库
git commit
命令,-m
后面输入的是本次提交的说明
$ git commit -m "提交文件"
[master (root-commit) d70b36f] 提交文件
1 file changed, 1 insertion(+)
create mode 100644 newfile.txt
工作区操作文件,然后add到 暂存区,再commit 提交
关联远程仓库
HTTPS地址配置
1、设置远程地址
$ git remote add origin https://gitee.com/love_yu_0698/git-repository.git
2、拉取远程代码(初次建仓库的README)
git pull origin master
3、添加要上传的文件
$ git add readme.txt
$ git commit -m "提交"
4、push 推送代码到 remote 远程服务器上
git push -u origin master
SSH地址配置
1、在本地生成sshkey
ssh-keygen -t rsa -C "xxx@qq.com"
会提示信息 继续按三次回车即可
2、查看你的 public key,
cat ~/.ssh/id_rsa.pub
3、复制key 并把他添加到码云(Gitee.com) SSH管理-添加公钥
4、添加后,在终端(Terminal)中输入
ssh -T git@gitee.com
出现 welcome to Gitee.com, 你的名字! #则添加成功
5、添加远程仓库地址 ,拉取代码/推送
$ git remote add origin git@gitee.com:love_yu_0698/git-repository.git
$ git pull origin master
$ git push -u origin master // 下一次可以直接 git push 后面不需要跟分支名
Git 常用命令
查看文件状态 (暂存区内的文件)
$ git status
查看文件改动的内容 $ git diff 文件名
$ git diff newfile.txt
查看最近到最远的提交日志( 一行显示)
$ git log
$ git log --pretty=oneline
撤销本地Commit
$ git reset HEAD~
回退版本
$ git reflog # 获取每次提交后的版本号
$ git reset --hard HEAD^ # 回退上一版,^^回退上上版,依次类推
$ git reset --hard HEAD 版本号 # 常用
删除文件
$ git rm newfile.txt
$ git commit -m "delete file"
撤销修改/恢复删除的文件
$ git checkout -- newfile.txt
----- 丢掉工作区修改的文件 还没有 add到暂存区
$ git reset HEAD newfile.txt
----- 已经添加到了暂存区的文件 还没有commit,可以退回该文件到工作区
拉取指定的远程分支(本地分支不存在)
方法1: 需要3步,(而且还存在 需要merge 的情况)
1、创建本地分支
git checkout -b 本地分支名
2、推送本地分支到远程仓库 -- 建立关系
git push --set-upstream origin 远程分支名
3、将远程分支的内容都拉取到本地
git pull origin 远程分支名
方法2:需要2步
git fetch // 用于获取最新的远程分支
git checkout -b 本地分支名 origin/远程分支名
方法3: 只需要一步 建立连接 ,并拉取内容
git branch --track remotes/origin/远程分支名
分支管理(解决冲突)
查看当前分支
$ git branch
$ git branch -a //查看所有分支
创建分支
$ git branch 分支名
切换分支
$ git checkout 分支名
创建+切换分支
$ git checkout -b 分支名
合并某分支到当前分支 如:A当前分支(有a,b文件) B被合并的分支(有a,c文件),merge 结果为 A分支(有a,b,c文件)
$ git merge 被合并的分支
删除分支
$ git branch -d 分支名
$ git branch -D 分支名 //强行删除
bug分支(正式环境出bug了,但是你手头上的项目做到了一半,又不能commit 可以通过 git stash 来解决)
暂时保存当前分支的内容
$ git stash
查看暂时保存的详情
$ git stash list
-------checkout 回到master分支,拉取代码,然后 创建新的分支,修改 ,测试,再合并修改后的分支,测试,发布---------
恢复 暂时保存的内容
$ git stash apply //恢复,但是恢复后,stash内容并不删除
$ git stash drop //删除,stash内容
$ git stash pop //恢复,并删除
远程库操作
更新远程仓库最新到本地(不会自动merge)
$ git fetch
查看远程仓库地址信息
$ git remote
$ git remote -v //详细信息
推送至远程分支
$ git push origin 分支名
$ git push --set-upstream origin 分支名 // 第一次推送 需要这么写,如果远程没有该分支名,会创建一个远程分支
查看远端库的分支情况
$ git branch -r
$ git branch -a //前文有讲到,这个命令是查看所有分支
git强制从远程拉下来文件
$ git pull origin master --allow-unrelated-histories
git删除远程分支
$ git push origin --delete 远程分支名
第一次把本地项目放到远程仓库
①初始化本地仓库
git init
②将所有文件添加到本地仓库(add 后面的空格+点 不能少)
git add .
③将项目提交到本地git仓库 (“first commit” 是备注信息 自己随便写)
git commit -m "first commit"
④本地git仓库与远程仓库关联(git@xx.xx.xx.xx:repos/xxx/xxx/xxx.git 是远程仓库地址)
git remote add origin git@xx.xx.xx.xx:repos/xxx/xxx/xxx.git
⑤将项目推送到远程仓库(master是分支名 -f 强制推送)
git push -u origin master -f 或者 git push origin master
执行⑤出错的话 执行下面命令后 在执行⑤
git pull --rebase origin master
⑥强拉失败 执行如下命令
git pull origin master --allow-unrelated-histories
解决冲突 merge
团队开发都会遇到的。
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
关于 Rebase
git merge A分支 -- 将A分支合并到当前分支,A分支的commit也会带入
git merge A分支 B分支 -- 将A分支合并到B分支
git rebase A分支 -- 把当前分支基于A分支做rebase,把A分支合并入当前分支,A分支的commit变为一行(如果有多行)
git rebase A分支 B分支 -- 把A分支基于B分支做rebase,把B分支合并入A分支,A分支的commit变为一行(如果有多行)
查看目标分支是从哪个分支切出来的
git reflog show yuqiang-v6-9-2-safe
git commit 撤销操作
撤销commit的操作, git reset --[soft | mixed | hard] HEAD^
下面重点讲一讲,soft mixed hard几个参数的区别
1> --mixed
不删除工作空间改动代码,撤销commit,并且撤销git add .
mixed为默认参数,也即git reset --mixed HEAD^与git reset HEAD^效果一样
2> --soft
不删除工作空间改动代码(在暂存区),撤销commit,不撤销git add .
3> --hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
git commit --amend
如果只是commit注释内容写错,就执行git commit --amend去修改commit的内容即可