git的基本使用

创建新仓库

创建新文件夹,在文件夹中执行git init
windows下不要使用自带记事本编辑文本

把文件放到仓库需要两步
Git add filename,将文件添加到仓库实际上是添加到暂存区,没有提示证明添加成功
Git commit -m “提交说明”命令,将文件提交到仓库,执行此命令后,暂存区在没有新的add之前就没有内容了,将内容提交到当前分支
-m 参数,后面跟的是本次提交的说明,建议每次加上
需要注意的是每次执行commit只是把当前暂存区的内容提交到仓库,距离来说就是当修改一个文件后执行了add(添加到了暂存区),此时又重新修改了该文件(但是没有add),然后执行了commit,此时提交的是第一次修改的文件,可以通过 git status查看状态。这种特性被称之为管理修改。
可以多次执行多次add,执行一次commit,因为commit可以一次提交很多文件
可以通过git status 查看仓库当前状态
使用git diff filename 查看文件修改了什么内容,主要是当修改后(或add后)没有提交时使用。difference
提交修改后的文件和提交新文件是一样的操作,两步git add和git commit

Git log 查看所有提交日志

Git log --oneline 简洁日志
Git log filename 查看filename相关日志
Git lop -p filename 显示每次提交的diff
git log --graph 图形模式显示

版本回退 git reset —hard HEAD^

HEAD代表当前版本,HEAD^表示上次个版本,HEAD^^上上一个版本,往上n个版本HEAD~n
也可以指定回到某个版本 git reset —hard 版本号
版本号通过git log查看
Git reflog 查看命令历史,用来记录每一次命令,

远程仓库版本回退
git reset --hard <版本号>  //本地回退到A1版本
git push -f origin <远程分支名称> //强制推送到远程仓库的 dev分支

撤销修改

使用git checkout — filename 在没有提交到暂存区(未执行add)撤销工作区的修改
使用 git reset HEAD filename ,当执行了add,使用该命令撤销暂存区的修改,重新放回到工作区。执行后此时暂存区是干净的,且工作区保持修改
当不但乱改了工作区内容还添加到了工作区,想丢弃修改,分两步,第一步使用git reset HEAD filename ,第二步使用git checkout — filename

使用git rm filename 删除文件

如果只是在工作区删除rm了文件,可以使用git checkout — filename 还原文件
远程仓库

生成公钥

通过ssh-keygen -t rsa -C “[email protected]” 命令创建SSH KEY
在用户主目录会生成一个.ssh目录,(ls -a查看)里面有id_rsa和id_rsa.pub两个文件,一个是私钥一个是公钥。

登陆github 添加SSH keys,这样github就可以确认只有你能推送
测试ssh key是否成功
使用命令ssh -T [email protected] 
添加远程库
登陆github,+ New repository
在Repository name填入远程库名称(自定义)

本地库与远程库关联

在本地库中执行git remote add origin [email protected]:michaelliao/learngit.git 关联远程库
miachaelliao是自己github账户名,learngit.git是github中仓库名称

为项目重新设置git remote url: git remote set-url  origin https://[email protected]/hello/etl.git


首次使用远程库(远程库是空的)时,使用git push -u origin master推送master 分支的所有内容
不是首次使用时,可以省略参数-u,git push origin master推送最新修改
首次使用git 的clone 或push命令连接github时会发出一个警告,yes就好,以后的操作就不会有了

从远程库客隆

创建一个新的远程库
注意勾选Initialize this repository with a README,这样会自动生成readme文件
在本地执行 git clone [email protected]:账户名/远程库名.git 进行克隆
克隆完成后后在本地生成一个和远程库名称一样的文件夹,里面包含了远程库的所有文件

从远程拉取分支(解决bug)

git pull origin 远程分支:新bug分支
git checkout 新bug分支

创建分支

git checkout -b dev 创建并切换到dev分支
这条语句相当于执行了git branch dev 创建分支和 git checkout dev 切换分支两条语句

可以通过git branch命令查看当前分支
在dev分支中修改提交文件,通过git checkout master切换到master分支,此时在master中是看不到修改的,需要将dev分支的工作成功合并到master分支上
Git merge dev命令将dev分支合并到当前分支上
此时dev分支就没有用了,可以删除,git branch -d dev

解决冲突

当在other分支和master分支同时对一个文件做了添加和提交操作后,在执行合并(merge)操作时,就会发生冲突
此时打开修改文件,查看两者各自修改信息,并作出最终修改,此时重新添加add,提交commit,
通过git log —graph查看详细信息,
删除other分支,git branch -d dev
使用—no-ff 方式的git merge
语法:git merge —no-ff -m “merge with no-ff” dev,以—no-ff方式合并dev
这种方式进行的合并在通过git log —graph可以看到历史信息
bug分支,git stash+git stash pop
理解就是将正在进行的分支(未完成,未添加提交)保存,切换到其他分支进行修改
保存现场git stash
修改完bug回到当前分支时,使用git stash pop恢复现场或者使用git stash apply + git stash drop两条命令
开发一个新的feature新建一个新的分支,强行删除一个没有被合并的分支,git branch -D <分支name>

多人协作

Git remote 查看远程库信息
-v 查看详细信息

推送分支 git push origin master(分支名称) 是将该分支上提交(commit)的文件推送到远程库
Git pull 获取最新提交,如果遇到”no tracking infomation”,则说明本地分支和远程分支的链接关系没有创建,使用命令git branch —set-upstream branch-name origin/branch-name

标签管理

创建标签 git tag  默认标签是打在最新提交的commit上
Git tag  commit_id(使用git log --pretty=oneline —abbrev-commit查看)
Git tag -a  -m “说明” commit_id
使用git tag查看所有标签
Git show 查看标签信息

Git tag -d 删除标签
Git push origin :refs/tags/删除一个远程标签

暂存

#储藏
git stash 
#查看储藏列表
git stash list
#恢复到最近一次储藏
git stash apply
#恢复到指定储藏stash@{2}
git stash apply stash@{2}

git stash apply --index

#删除
#删除第一个队列
git stash drop stash@{0}
#清空所有的
git stash clear

创建远程分支

#本地开发我们可能会创建一个新的分支(远程并没有此分支)
#本地
git checkout -b f-category
#然后mkdir a.txt
git add a.txt
#此时 git push origin,会出错是因为远程没有此分支。
git push origin f-category #将此分支推到远程,并在远程创建分支(或者 f-category:dev方式推送到远程分支)

删除远程文件

git rm file 删除
git rm -f file 强制删除
git commit -m "删除XX文件"
git push 

发布到线上:

git tag publish/0.1.5
git push origin publish/0.1.5:publish/0.1.5

线上代码覆盖到本地:

git checkout --theirs build/scripts/ddos
git checkout --theirs src/app/ddos

强推

git push origin master -f

为项目添加成员

#github
项目下的setting->Collaborators->add collaborator
git merge --no-ff dev //添加合并提交
  1. 撤销修改

因为暂存区的存在,撤销修改分为几种情况(通过 git status 查看仓库状态时会提示相关撤销修改的命令):

修改后,文件没有放入暂存区(即文件一直在工作区):用 git checkout – 文件名 撤销工作区的改动(回到跟版本库一样的状态,即回到最近一次 git commit时的状态,所有改动全部清除)

修改后,文件放入暂存区,且文件没有再次修改(即文件已经进入暂存区):分两步:先用 git reset <文件名> 撤销 git add 操作(此时更改仍留在工作区),再执行 git checkout – 文件名 清除工作区的改动

修改后,文件放入暂存区,且文件再次修改:分三步:先用 git checkout – 文件名 撤销工作区的改动,再用 git reset <文件名> 撤销 git add 操作(此时更改仍留在工作区),最后执行 git checkout – 文件名 清除工作区的改动

通过 git checkout -- 文件名 命令可以撤销文件在工作区的修改。
通过 git reset 文件名 命令可以撤销指定文件的 git add 操作,即这个文件在暂存区的修改。
通过 git reset 命令可以撤销之前的所有 git add 操作,即在暂存区的修改。

git checkout -- 文件名 命令中的 -- 表示命令行在 -- 之后没有更多的选项。这样的好处是,如果碰巧有一个分支与文件名重名,仍然可以恢复该文件,而不是切换到同名的分支。

你可能感兴趣的:(git,命令,团队合作,代码托管)