一、git的两种连接方式
1,http连接
http://username:password@githost.git
2,ssh连接
现在在本地生成ssh-key,执行
ssh-keygen -t rsa -C 'your name'
生成id_rsa和id_rsa.pub
将id_rsa.pub内容添加到githost的管理平台的ssh keys
则可以ssh访问
git@githost.git
相对http连接,ssh连接比较安全
二、git日常命令
1、克隆
git clone http://username:password@githost.git
或
git clone git@githost.git
2、创建分支
git branch branchname 创建分支
git checkout -b branchname 创建分支并切换至新分支
3、切换分支
git checkout branchname
强制切换分支
git checkout branchname --force
4、将本地当前分支推到远程(创建远程分支)
git push origin branchname
5、下拉远程分支
git checkout -b branchname origin/branchname
由于gitv2将push.default默认为simple,故而本地分支名和远程分支名要一致
避免git push报错
6、删除本地分支
git branch -d branchname
强制删除本地分支
git branch -D branchname
7、设置git用户和邮箱
git config --global user.name 'xxx'
git config --global user.email 'yyy'
8、设置远程库的url(比如从http连接改为git连接)
git remote set-url origin xxx
9、本地分支关联远程分支(关联后直接使用git pull和git push即可完成下拉和上传)
git branch --set-upstream-to=origin/branchname
10、查看本地配置
git config --local --list
11、查看分支
git branch 查看本地分支列表
git branch -r 查看远程分支列表
git branch -a 所有分支列表(本地和远程)
12、从远程获取最新版本到本地,不做merge
git fetch (通常用于远程增加了分支,git branch -r却看不见的更新分支列表)
git fetch -p (删除掉没有与远程分支对应的本地分支)
13、删除远程分支
git push origin --delete branchname
或
git push origin :branchname
14、暂存
git stash 临时保存修改
git stash list 查看临时保存文件列表
git stash pop 释放出之前临时保存的修改
使用场景:
在B分支开发,需要切到A分支处理问题,但B分支代码未开发完,此时需要暂存B分支代码
git stash
查看暂存文件列表
git stash list
切换到A分支处理问题
git checkout A
问题处理完切换到B分支继续开发
git checkout B
释放出之前的修改
git stash pop
15、版本回退
git reset --hard head 会退到最高版本(未提交时)
git reset --hard 版本号 回退至指定版本
17、查看日志
git log filename 查看具体文件提交记录
git log -2 查看分支最近的两次提交记录
git log -2 filename 查看具体文件最近两次提交记录
git log -p filename 查看文件具体的修改内容
git log -p -2 filename 查看具体文件最近两次修改内容
18、追责
git blame filename 查看文件的每一行修改
19、合并
git merge A 将A分支合并至当前所在分支
git rebase A 将A分支合并至当前所在分支
merge会保留分支提交记录
rebase不会保留分支提交记录
如果有冲突
merge会继续执行合并,并将所有的冲突展示出来
rebase遇到冲突会停下来,一次只会展示一个冲突,
手动修改冲突后,执行提交操作
个人偏好使用merge
20、忽略
有些重要文件或者日志文件等不想上传,可以编辑.gitignore
例如忽略.idea文件下所有的文件
在.gitignore中添加
.idea/*
如果该文件已经push,例如config.php,则依次执行
git rm --cached config.php//从版本库中删除,在工作目录中保留
在.gitignore添加
config.php
git commit
git push
上述操作完成后,其他开发通过pull,也会忽略config.php
如果需要忽略的文件夹
git rm -r --cached directory
如果只想自己这里把config.php的改动不上传(其他人依旧可以修改上传)
git update-index --assume-unchanged config.php
这个文件修改后,git status不会有变化
21,cherry-pick
场景:A分支提交了多个版本,B分支并不需要A分支最新的代码,而是A分支多次提交的某一个版本
此时,在A分支找到需要使用的版本的hash值,在B分支执行
git cherry-pick A分支需要使用的版本hash
如果遇到冲突,可手动处理冲突
22,reset
场景:git add . & git commit 之后,没有git push,想撤销本地的commit
git log 找到上一次的commit id--->last_commit_id
仅撤销本地commit 保留修改内容
git reset last_commit_id
撤销本地commit 且删除修改内容
git reste --hard last_commit_id
23,切换源
【git remote set-url origin URL】 更换远程仓库地址,URL为新地址。
24,分支重命名
重命名本地分支
当前在要修改的分支上: git branch -m new_branch_name
当前不在要修改的分支上: git branch -m old_branch_name new_branch_name
修改远程分支
1,重命名本地分支: git branch -m new_branch_name
2,删除远程分支: git push --delete origin old_branch_name
3,上传新命名的本地分支: git push origin new_branch_name
4,关联本地分支和远程分支: git branch --set-upstream-to origin/new_branch_name
25,修改commit注释
1,修改最后一次注释
git commit --amend
进入编辑界面(注释在第一行),输入i进入修改模式,修改后Esc退出,输入:wq保存
2,修改之前的某次注释
①git rebase -i HEAD~2
最后的数字2指的是导出第几次,比如2就会显示倒数的两次注释(最上面两行)
②找到想修改的那条注释,把注释前面的pick换成edit。保存退出。
③git commit --amend,修改注释并保存。
④git rebase --continue
3,修改之前的某几次注释
①同上
②将多个想修改的commit注释前面的pick换成edit
③依次修改你的注释(顺序是从旧到新),Terminal基本都会提示你接下来的操作,没修改一个注释都要重复上面的③和④,知道修改完选择的所有注释。
4,如果将代码push到远程仓库
①把最新的版本从远程仓库先pull下来,修改方法都如上,修改完成后,强制push到远程仓库
git push --force origin your-branch
注:很重要的一点事,你最好保证在你强制push之前没有人提交代码,如果在你push之前有人提交了新的代码到远程仓库,然后你有强制push,name会被你的强制更新覆盖!!!
26,git merge 冲突解决(还原到之前的版本)
git merge --abort
三、总结
准备工作
1、克隆到本地
git clone 远程地址
2、设置全局用户及邮箱
git config --global user.name 'xxx'
git config --global user.email 'yyy'
3、下拉分支代码
git checkout -b localnranchname origin/remotebranchname
4、设置本地当前分支与远程分支关联
git branch --set-upstream-to=origin/remotebranchname
git一般工作流程
1、git add .
保存本地修改
2,git commit -m 'xxxx'
提交到本地并记录
3,git pull
下拉远程修改
4,git push