[Git] Git 使用记录
1. 配置git客户端
1.1 安装git bash
1.2 设置ssh Key
查看是否有ssh key
ls -al ~/.ssh
没有则生成ssh key
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
将生成的公钥 (.pub为后缀) 上传到git网站上
eval $(ssh-agent -s) //确定ssh-agent正在运行
ssh-add ~/.ssh/id_rsa //添加ssh私钥到客户端
ssh git@github.com //测试
1.3 设置用户名和邮箱
git config --global user.name "NAME HERE"
git config --global user.email "aaa@qq.com"
2. 管理项目
2.1 本地已有项目
在项目的目录下执行以下命令(git bash)初始化仓库
git init
项目下会多出.git文件夹(默认隐藏)
将项目与远程仓库关联
git remote add origin git@github.com:arcsinW/OpenHelloCDUTUWP.git
git remote -v # 查看远程仓库
提交更改
git add .
git commit -a -m "Initial commit"
git push origin master
或者
git add .
git commit -a # 接着在git bash 里的文本编辑器里写Commit message
git push origin master
2.2 从远程仓库获取项目
git clone https://github.com/libgit2/libgit2 //获取master分支
git clone -b dev https://github.com/libgit2/libgit2 // 获取dev分支
2.3 分支
git checkout -b dev # 新建并切换到dev分支
git branch # 查看本地分支
git branch -a # 查看远程分支
git checkout master # 切换到master分支
git merge dev # 合并dev分支到当前分支
git branch -d dev # 删除dev分支
git push origin --delete dev # 删除远程dev分支
git checkout -b dev origin/dev # 从远程仓库拉取本地不存在的dev分支
下图是在当前分支为signle_edition时执行git merge master
时出现冲突的情况,IDE是VS Code
<<<<<<< HEAD 到 =======的部分是当前分支single_edition的版本
======= 到 >>>>>>> master是master中的版本
处理冲突就是手动选择保存哪个版本的代码
处理好冲突后,使用add
将该文件标记为已解决状态
git add filename
2.4 版本控制
git rm --cached readme.txt # 将文件untrack,不删除文件
git rm readme.txt # 将文件untrack并删除
git log --pretty=oneline # 查看提交日志
git --no-pager log # log不分页
git reset --hard HEAD^ # 回退到上一commit
git reset --hard [commit_id] # 回退到指定commit,commit_id只需写前几位,能唯一确定这个commit即可
3. some solutions
- refusing to merge unrelated histories
加上--allow-unrelated-histories
git pull origin master --allow-unrelated-histories
- 修改提交到远程仓库的commit信息
查看本地仓库的log信息,找到要修改的commit之前一个commit的id
git log --pretty=oneline
git rebase -i [commit_id]
将要修改的commit信息前的pick改成edit
git commit --amend #修改commit信息
git rebase --continue
git push -f origin master #覆盖远程仓库commit信息(也会覆盖其他人的提交)
- 重新添加 .gitignore
git rm -r --cached .
git add .
git commit -m "add .gitignore file"
- 查看版本控制下的文件
git ls-files
- git stash
当你想切换分支,但工作区还有未提交的代码,而这个代码还没写完不想提交,这时候可以把当前的工作状态暂时存储起来
git stash // 存储当前的变更
git status // 工作区此时clean了
git stash list // 查看所有的stash
git stash apply stash@{0} // 恢复stash@{0}这个stash(由上一步获得)
git stash show -p stash@{0} | git apply -R // 取消一个stash
git stash branch testchanges // 在新分支中查看stash