参考文档 Pro Git Book
简单操作:
###############################################
基本操作
###############################################
git init 把这个目录变成Git可以管理的仓库
git add readme.txt 把文件添加到仓库
git commit -m "wrote a readme file" 把文件提交到仓库
git commit -a -m "message" 但是对于新建的文件 还是需要首先使用 git add添加到缓存区中
git status 查看工作区或暂存区的状态 nothing to commit, working tree clean
git diff readme.txt 在修改文件后并没有add操作,查看暂存区和工作区的difference
git log --graph --pretty=oneline --abbrev-commit 打印log一页展示
git reflog 显示log,<commit id>会简写
git reset --hard HEAD^ 回退上一个版本 上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
git reset --hard <commit id> 回退到指定版本 commit id 可以通过log查看 ,版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
cat readme.txt 查看文本内容
git checkout -- readme.txt 把readme.txt文件在工作区的修改全部撤销 (可以理解为还原为前一次commit或者add)
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git reset HEAD readme.txt 把暂存区的修改撤销掉,重新放回工作区 (还原到add之前,在使用 git checkout命令,回退到修改前的状态)
git rm test.txt git commit -m "remove test.txt" 删除文件并从版本库中删除 (rm 后一定要commit)
git rm -r 文件夹 删除文件夹
###############################################
远程仓库
###############################################
ssh-keygen -t rsa -C "youremail@example.com" 生成本地秘钥 ,youremail@example.com是github账号
C:\Users\admin\.ssh这个路径下会生成两个文件:id_rsa和id_rsa.pub , id_rsa.pub为公钥
git remote add origin git@github.com:zhangli0116/myrepository.git 给远程仓库的地址添加别名
远程库的别名就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
ssh git@github.com 测试连接
ssh-add ~/.ssh/id_rsa 作用未知?
git remote remove origin 删除远程仓库别名origin
git remote -v 查看详细远程库信息
git pull --rebase origin master 同步远程仓库和本地仓库,把远程仓库文件同步到本地
git push -u origin master 实际上是把当前分支推送到远程仓库origin master 分支
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master 普通推送
git clone <remote ssh url> 远程仓库克隆到本地(本地不需要进行初始化 git init)
git pull gitee master --allow-unrelated-histories 把远程仓库内容拉取到本地仓库并合并(如果冲突需要解决冲突,再提交)
git branch --set-upstream-to=origin/dev dev 将本地dev分支与远程仓库dev分支进行关联
git fetch <remote name> <branch name> 把远程库的内容抓取到本地
git merge <remote name>/<remote branch> 把远程库分支的内容与当前分支合并
git pull = git fetch + git merge
git checkout -b dev origin/dev 在本地建立分支dev 并和远程仓库origin/dev分支关联 (提前保证远程仓库中存在分支dev)
###############################################
分支管理
###############################################
git checkout -b dev 创建分支dev并切换到分支dev
git branch dev 创建分支dev
git checkout dev 切换
git branch 查看本地分支 分支前带* 表示当前正在使用的分支
gti branch -a 查看所有分支(如果和远程分支建立联系,包括远程库的分支)
git merge dev 把dev合并到当前master分支
git branch -d dev 合并后删除分支
git branch -D dev 没有合并,强行删除分支
现在,master分支和feature1分支各自都分别有新的提交,变成了这样
git merge --no-ff -m "merge with no-ff" dev
git stash 当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash apply 恢复stach内容 git stash apply命令时可以通过名字指定使用哪个stash,默认使用最近的stash(即stash@{0})
git stash drop 删除stach内容
git stash pop 恢复并删除stash内容
git stash list
git checkout -b dev origin/dev 在本地建立分支dev 并和远程仓库origin/dev分支关联 (提前保证远程仓库中存在分支dev)
**************向远程仓库分支push时,一定要保证建立了联系**************