前言:
之前在windows平台下写过一篇关于git使用的文章,但是那篇blog写的太过于新手向,而且也没有给出过程中可能遇到的问题的解决方案。最近要用git提交学校课程的实验代码,故重开一篇,记录一下实验中能用到的git的相关内容(MacOS下),供大家参考,也供自己查阅。具体的提交过程就不再赘述,上一篇文章里写的还算清楚。能力有限,如有错误之处敬请指正。
参考内容:
- 实验楼课程–https://www.shiyanlou.com/courses/4/learning/?id=21
- https://blog.csdn.net/u012145252/article/details/80628451
- https://www.cnblogs.com/czwangzheng/p/5086903.html
git的使用
git的安装:
- 对于苹果用户,只需要在terminal中输入git。如果之前没有安装过,则系统会提示你安装开发者命令行工具(好像是叫这个名),点击安装即可。(听说)这个git是和xcode绑定的, 但是本人在使用过程中并未产生任何异样或障碍。
- 如果想安装独立版本,请点击git官网,界面与上一篇中Windows的界面完全一样。下载后即可安装。
git的使用:
初始化:
- 设置commit时的用户名和邮箱:
git config --global user.name "(此处输入用户名)"
git config --global user.email "(此处输入邮箱)"
- 查看git配置文件
cat ~/.gitconfig
- 在本地初始化一个git新库:
git init
这里,init会在当前文件夹建立一个隐藏文件夹.git,通过
ls -a
可以查看。
- 从远程clone一个库:
git clone http://........(你要clone的代码的http地址)(ssh也可)
利用git提交代码:
- 将修改过的代码提交至缓冲区:
git add test
//(test为文件名,根据需要替换)
- 将代码提交到本地代码库:
git commit -m "add test"
# 双引号中内容为提交时的备注,可自行替换。
- 设置远程地址
git remote add origin http://......
- 将代码提交到远程库:
git push origin master
# 此处提交到对应库的master分支上,如果有需要,
# 可将master改为目标分支名。需要输入用户名和密码。
- 查看当前git仓库内容:
git status
- 查看当前git缓冲区内容
git diff --cached
# 进入diff界面后,按q退出。
# 如果没有 --cached 参数,git diff 会显示当前你所有已做的但没有加入到缓存区里的修改。
# 如果此时你没有改完,可以退出继续对代码进行修改,之后加入到缓冲区(add)。
对于分支的处理:
- 创建新的分支:
git branch exp
# 此处创建名为 exp 的分支,可根据需求修改名称
- 查看当前分支情况:
git branch
- 切换分支
git checkout exp
# 将分支切换到exp,可根据目标将 exp 改为目标分支名。主分支为 master。
- 合并分支
git merge -m "merge exp to master" exp
# -m 内仍然是注释内容,根据需求修改
# 如果将分支合并到主分支,需要先将当前分支切换为主分支。
# 如果两个分支的文件内容有冲突,则冲突会写在 master 分支中,可通过diff查看。
# 通过diff查看时,不加 -cache 参数,可查看未提交到缓冲区的、有冲突的文件。
# 如果仍需 merge ,可手动修改 master 中文件内容。
- 撤销分支的合并
git reset --hard HEAD^
- 删除分支
git branch -d exp
# 删除名为exp的分支
# 参数为-d时只能删除已经合并过的分支。
# 如果此分支没被合并过,但需要强制删除,则将 -d 换为 -D 。
git日志:
- 查看日志
git log
- 日志统计:
git log --stat
- 调整日志格式:
git log --pretty=oneline
# 根据需求可将 oneline 换位其他格式
遇到的问题:
问题一
fatal: refusing to merge unrelated histories
- 问题原因为本地仓库与远程仓库相互独立,可能本地仓库的内容不是通过clone从远程仓库拿到的。
- 解决办法:
git pull origin master --allow-unrelated-histories
问题二
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
- 问题原因为本地不包含远程仓库所有文件,push失败。
- 解决方法可以先pull,在push
git pull origin master
git push origin master