ubuntu安装git
sudo apt install git-all
获取git更新
git clone git://git.kernel.org/pub/scm/git/git.git
设置初始参数
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
设置ssh(不用每次push都输密码)
ssh-keygen -t rsa -C ”邮箱“
gedit .ssh/id_rsa.pub //复制里面的密匙到github仓库
ssh -T ssh -T git@github.com //测试是否成功配置
git工作区中文件的状态图:
git init 开始管理项目
git add README 开始跟踪新文件/把已跟踪的文件放到暂存区/合并时把有冲突的文件标记为已解决状态等。
git commit -m “…” 提交
git commit -a -m ‘…’ 跳过add 直接commit所有修改
git status 查看哪些文件处于什么状态 -s 精简版
git mv README.md README <=>
$ mv README.md README
$ git rm README.md
$ git add README
git commit -m ‘initial commit’
git add forgotten_file
git commit --amend //覆盖上一次提交
git rm --cached README 停止追踪文件(从暂存区中移除)
git restore test.md 撤销对文件的修改(未提交到暂存区)
分支
git branch testing 创建一个分支
git log --oneline --decorate 查看各个分支当前所指的对象
git checkout testing 分支切换 -b没有就新建一个
git branch 查看分支情况 -v详细一点
git log --oneline --decorate --graph --all 更加直观地查看分支情况,非常好用
git merge hotfix 一般旧的分支向新的分支合并,此时旧的更改,新的不会更改
git branch -d hotfix 删除分支hotfix
如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们
打开有冲突的文本后会发现git自动标识了冲突:
===的上半部分是HEAD指针所在分支的冲突部分情况
===的下半部分是被合并分支的冲突部分情况,需要我们手动合并
手动合并:选择其一…,然后add和commit,git会标记冲突已经解决 ,此时git已经帮我们自动合并了
git branch --merged 查看已经合并的分支
git branch --no-merged 查看还没有合并的分支
git branch --no-merged master 查看还没有合并到master的分支
git branch -D test 删除还没有合并的分支
git checkout experiment
git rebase master 变基到master分支上
git checkout master
git merge experiment 回到maste分支上合并
git reset --hard 版本号 跳转到指定版本
远程
git clone https://github.com/schacon/ticgit 克隆仓库
git remote add pb https://github.com/paulboone/ticgit 添加远程仓库
git remote rename pb paul 给远程仓库改名
git remote remove paul 移除远程仓库
git fetch 抓取 不自动合并
git pull 拉取 自动合并 =git fetch+git merge
git push origin master 推送到远程仓库 -f强制推送
git clone --bare … 克隆一个裸仓库 没有工作目录 可以作远程的服务器!
git push origin --delete grc 删除远程分支
假设有一个分支A,向master分支提交PR,然后发生无法自动解决的冲突,PR提示不能执行merge合并。
- 本地checkout检出并切换到A分支,pull拉取更新到最新代码
- 在本地A分支上,merge合并远程分支master
- 会提示无法合并,手动解决完冲突提交到A分支
- 回到PR,会发现PR已经无冲突
- 让有merge权限的人进行merge即可