git下载和配置
mac版本下下载git:使用brew install git下载,brew upgrade git更新,
下载完成后使用git --version查看版本,发现不是最新版,
因为自动指向了系统自带的git,
which git 查看,发现指向的是/usr/bin,
而我们brew安装的最新git是在/usr/local/bin下,
所以,更新一下环境变量,vim ~/.bash_profile,
加入export PATH="/usr/local/bin:$PATH",保存,source~/.bash_profile是变量生效,
之后再看版本,就是最新版啦(自动为mac语言版)
使用git
首先,选择一个合适的地方,创建一个空目录:
mkdir learnGit
cd learnGit
通过git init就能把这个文件夹变成git本地仓库啦
ls -a 能看到有一个.git的隐藏文件
在该目录下编写一个文件vim readme.txt
随便写一些东西,保存
git add readme.txt 把这个文件放入缓存区了
git commit -m "first Git file" 添加完说明这个文件就放入仓库了
版本控制
随便修改一下readme.txt
vim readme.txt 修改保存,
然后git add , git commit
这样就有两个版本了,要回退版本
git reset --hard HEAD^ 回退到上一个版本
当然也可以指定回退到哪个版本
git log 查看版本id
这时候commit的作用就有了,你可以大概知道这个版本的信息
git reset --hard (id) 回退到该id的版本
git log只能查看之前操作的版本,那如果要回到之后的版本
就要用git reflog来查看未来版本的id
然后还是reset,可以回到未来的版本
git checkout -- <filename> 可以撤销上一次对该文件的修改git add之前的
git reset HEAD <filename> 把add到缓存区的文件取回到本地
删除文件rm 可以删除本地文件
要删除仓库里的使用 git rm
当然如果删除错了还可以回退,git checkout -- <filename> 注意保证该文件是commit后的
连接远程仓库(已经有大神搭建好了仓库,也就是gitHub)
ssh-keygen -t rsa -C "email@example.com" (email是你自己的gitHub账号)
没有特殊需要就不用设置密码,一路回车➕y
如果顺利的话,可以在用户主目录(~)里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,
cat id_rsa.pub 复制所有显示的内容
登陆GitHub,打开“Account settings”,“SSH Keys”页面,Add SSH Key,title任意,把复制的内容粘贴到Key里,add Key
登陆GitHub,然后,在右上角的➕号,NEW repo创建一个新的仓库
Repository name填入名字,其他都默认,点击create
根据gitHub的提示,我们可以把本地的仓库跟这个同步起来
git remote add origin git@github.com:账号/repo名.git
origin是远程仓库名,建议就写origin
把本地仓库同步到远程
git push -u origin master
第一次会有警告,一般没问题,可以对照一下RSA https://help.github.com/articles/what-are-github-s-ssh-key-fingerprints/
之后每次要提交只要git push origin master就行
在分支里编写文件
git switch -c dev (最新版本有switch,创建dev分支并进入)
然后在该分支下写文件,提交文件
之后在切回master-branch合并一下
git merge dev 把dev分支的内容合并到master里,
删除dev分支 git branch -d dev
git branch可以查看现有的分支
关联远程仓库后操作(Fork之后的操作,fetch把origin仓库内容拉到本地仓库,rebase同步,再push到自己的远程仓库)
暂存工作目录git stash
git fetch upstream (把远程仓库upstream拉到本地)
git rebase upstream/master (同步)
rebase过程中如果出现冲突,用 'git am --show-current-patch' 命令查看冲突细节,红色为远端,绿色为本地,解决冲突后,
查看git status,执行git add后继续执行git rebase --continue
取消已在进行中的rebase操作,执行git rebase --abort,版本回退到执行rebase操作前的状态
恢复工作区git stash pop
本地的同步了之后,git pull 与本地master分支同步
-
push无法成功
一般是由于本地代码与远程仓库代码不一致导致,有两种解决办法
1. pull远程仓库,修改冲突后再提交 git pull
2.本地代码覆盖远端代码
git push --force
⚠️远端分支多人使用情况下执行,有可能将他人的commit覆盖删除
遇到这种一定要先push,保证自己的远程仓库和本地仓库一致。
远程仓库的分支操作(pull,修改,push,cherry-pick)
根据远程仓库upstrem的cps分支在本地新增分支
git checkout -b cps-v2.10.x --track upstream/cps-v2.10.x
接下来把这个分支push到自己个人的远程仓库origin上
git push origin
切换分支(代码根据分支改变)
git checkout <branch>
查看分支
git branch
reabse远程仓库到本地分支
git fetch upstream (根据remote -v的名字来)
git reabse upstream/cps-v2.10.x (branch name)
不增加commit的push
git commit --amend
合并多余的commit
git rebase -i HEAD~3 处理前3个commit
drop 多余的commit