git
git基本操作
获取与创建项目命令
-
git init : 初始化一个Git仓库,执行完后会生成一个.git
创建一个项目(空文件夹或者已有的项目),在终端中打开这个项目,执行仓库初始化。
$mkdir runoob $cd runoob/ $git init Intialized empty Git repository in /user/tuanqixin/www/.git/ # 在/www/runoob/.git/目录初始化空 Git仓库完毕
-
git clone : 拷贝一个Git仓库到本地,可以查看并修改。或者复制一个项目,查看代码
$git clone [url(远程仓库)]
基本快照
-
git add : 可将创建的文件从工作区添加到暂存区,如果添加后的文件有所改动,会自动回到工作区,需要再次添加到暂存区,然后再提交。
- git add . 命令来添加当前项目的所有文件(新项目中添加所有文件很普遍)
-
git status 命令用于查看项目的当前状态(如果没有需要添加或者提交的文件,或者没有改动的文件则会显示nothing to commit, working tree clean。)
-
git diff 来查看执行git status 的结果的详细信息
-
git commit :将想要快照的内容写入缓存区,而执行命令(add)后将缓存区内容添加到仓库中。Git为你的每一个提交都记录你的名字与电子邮箱地址,第一步要配置用户名和邮箱地址
git config --global uesr.name "your name" git config --global user.email "your email" git conmmit -m # -m选项在命令行中提交注释 git commit -am # 添加和提交文件合并成一步
-
git reset HEAD : 用于取消已缓存的文件,文件回到工作区
-
git rm : 从Git中移除某个文件,将该文件提交以后执行此项命令即可删除。
git rm <file>
-
如果提交文件以后,对文件进行修改,文件自动回到工作区,在add到暂存区,如果此时想要删除文件用强制删除选项 -f
git rm -f <file>
-
如果把文件从暂存区域移除,但仍希望保留在当前工作目录中,即:仅从跟踪清单中删除,使用--cached选项即可。
git rm --cached <file>
-
git mv : 用于移动或重命名一个文件、目录、软连接。
git mv
Git分支管理
1. 创建分支命令
git branch (branchname)
2.切换分支命令
git checkout (branchname) git checkout -b (branchname) # 创建并切换到分支branchname
3.合并分支:
-
一旦某分支有了独立的内容,希望将它合并回到主分支,可以使用该命令。
-
可以多次合并到统一分支,也可以选择在合并之后直接删除被并入的分支。
git merge
4.列出分支
git branch * master # 没有参数时,git branch会列出你在本地的分支 # *号显示当前所在的分支 # 当执行git init的时候,默认情况下Git就会创建master分支
4.删除分支命令:
git branch -d (branchname)
合并冲突:
-
合并并不仅仅是简单的文件添加、移除的操作,Git也会合并修改。
$ git branch * master $ cat hello.py $ git branch yyp $ vim hello.py hello yyp! $ git commit -am 'change the hello.py' $ git checkout master Switched to branch 'master' $ cat hello.py $ vim hello.py $ cat hello.py hello python! $ git commit -am "修改代码" $ git merge yyp $ cat hello.py hello python! ============ hello yyp! $ vim hello.py $ cat hello.py hello yyp! $ git status -s D hello.php AA hello.py $ git commit [master 7732186] Merge branch 'yyp'
Git查看提交历史
-
git log:在使用Git提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,使用git log 命令查看。
-
git log --oneline:查看历史记录的简洁的版本。(项目的开发历史)
-
git reflog :简洁显示所有的提交记录
-
git log --graph :查看历史中什么时候出现了分支、合并。开启了拓扑图选项。(何时工作分叉、又何时归并)
-
git log --reverse 参数来逆向显示所有日志。
-
git log --author :查找指定用户的提交日志
-
git log --since和--before
-
git reset --hard 版本号(42cb617)(HEAD{0})
git log --onelinr --before={3.weeks.ago} --after={2010-04-18} -- no merges # 查看Git项目中三周前在四月十八日之后的所有提交,——no merges 选项以隐藏并提交
Git标签
- git tag -a : 创建一个带注解的标签,指定标签信息
- git lag --decorate:查看标签
- git show v1.0:查看v1.0标签的注释
- git tag -a v0.9 85fc7e7: 给85fc7e7追加标签v 0.9
- git tag :查看所有标签
- git tag -s <tagname> -m ’runoob.com标签‘:PGP签名标签
Github
-
git remote add [shorttime] [url]:添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用
-
ssh-keygen -t rsa -C 'yourmain@example.com'(Github注册的邮箱)
-
cat ~/.ssh/id_rsa.pub : 查看ssh
-
ssh -T git@github.com : 验证是否成功连接Github
-
本地的内容推送到GitHub仓库
$ mkdir yyp-git-test #创建测试目录 $ cd yyp-git-test/ #进入测试目录 $ echo '#yyp' >>README.md #创建README.md文件,并写入内容 $ ls #查看目录下的文件 README.md $ git init #初始化 $ git add README.md #添加文件 $ git commit -m "添加README.md文件" #提交并备注信息 #提交到Github $ git remote add origin git@github.com.yyp-223/yyp.git $ git push -u origin master
# 远程命令 添加 远程仓库的别名 远程仓库的地址 git remote add origin 远程仓库地址
-
推送master分支到远程仓库
向origin 仓库上推送 master分支 git push -u origin master #-u指定默认,以后git push 默认推送mast分支(不建议使用-u)
-
拉取远程仓库
git clone 远程地址 git branch # 此时本地只显示master地址,但所有的分支都已经拉取下来了 git pull origin dev # 只拉取dev分支
-
拉取最新的仓库代码时如果与本地冲突
-
先将发生冲突的本地代码提交后再拉取,手动处理冲突。
git pull origin dev #等同于 git fetch origin dev(避免产生分叉) git merge origin/dev
-
变基
-
场景一:多个记录整合成一个记录
git rebase -i #某一次的提交记录信息,合并到当期那提交记录 git rebase -i HEAD~3 #最近的三次提交记录合并 #出现 Vi 编辑区域 根据下面提示选择 一般我们会将 pick 修改为 s # 保存退出 再次出现 vi 的编辑区 列出要合并的提交记录 例如修改为 v1 & v2 & v3 # 保存 git log #查看提交记录 注意:尽量不要合并已经提交到远程仓库的(提交记录)
-
场景二:
master c1 - c2 -c4 -c5
dev c3
Mater c1 -c2 -c3 -c4-c5
将c3在其他分支上的提交记录 合并到master分支上
git checkout dev
git rebase master # 变更当前dev分支的基
git checkout master
git merge dev
-
场景三:远程拉取代码,会有合并冲突,产生分叉
git pull origin dev #可能产生记录分叉 git fetch origin dev git rebase origin/dev #不产生记录分叉
-
注意事项
- git rebase 产生冲突怎么办?
- 会提示
- 1、解决冲突
- 2、git add
- 3、Git rebase --contine
网友评论