git主要命令及作用

创建仓库

mkdir learngit
cd learngit
pwd

pwd是用来显示仓库所在位置的, 名字尽量不要用中文, 避免不必要的错误.

git init

git init 可以把仓库变成可用git管理
运行后在当前目录下会生成 .git 文件, 是用来跟踪管理版本库的, 没事儿不要乱改它, 否则就把仓库毁了.
这个文件默认隐藏, 用 ls -ah 命令可以看到.

把一个文件放到git仓库中

第一步: git add 文件名
使用git add 把文件添加到仓库, 一次添加一个文件.
**git跟踪的是修改而不是文件, 所以每一次修改都要执行一次git add才可以提交到commit中.
第二步: git commit -m “…”
使用 git commit 把文件提交到仓库, 一次可提交多个文件.
-m 后面的内容是对此文件的说明, 方便查找.
git commit命令执行成功后会出现1 file changed: 一个文件被改动, 2 insertions: 插入了两行内容

git status

时刻掌握仓库当前状态.

git diff 文件名

可用来查看上次对此文件做出了什么改动.
提交修改文件和提交新文件是一样的.

git log

查看提交日志
也可在后面加上 --pretty=oneline 这个参数变成 git log --pretty=oneline可以看到一长串十六进制数字, 这个是commit id

版本回退

git reset --hard HEAD^ 返回上一次的文件状态
HEAD^ : 返回上一次状态
HEAD^^ : 返回上上一次状态
.
.
.
HEAD~100 : 返回一百次前的状态
如果还想变回来, 只要窗口还没关,就可以找到刚刚那个最新版的commit id ,就可以使用git reset --hard 1094a来变回来.
当然还有另一种方法,git reflog可以展示命令历史.

工作区和暂存区

在电脑里能看到的目录就是工作区
隐藏文件夹 .git 不是工作区, 而是git的版本库, 其中最重要的就是state-暂存区, 还有一个自动创建的分支master , 以及指向master的一个指针HEAD
在这里插入图片描述
需要提交的文件都会放到暂存区, 然后将所有暂存区的文件一次性提交上去.

撤销修改

  1. git checkout -- 文件名返回到最近一次修改之前,
  2. git reset HEAD 文件名将暂存区的修改撤掉, 重新放回工作区.
    git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

删除文件

git rm
如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

链接远程仓库github

  1. 登录github
  2. 右上角找到“Create a new repo”按钮

在这里插入图片描述
4. 在Repository name填入learngit,其他不变,点击“Create repository”按钮,创建成功.
5. 可以在这个仓库克隆出新的仓库, 也可以让本地仓库与之关联,
6. 在本地仓库下运行git remote add origin [email protected]:GitHub账户名/仓库名.git,添加后,远程库的名字就是origin,可以改但不需要.
7. git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。git push origin master

仓库克隆

  1. 创建一个新的仓库, 勾选Initialize this repository with a README,会自动创建一个README.md文件.
  2. 克隆一个本地库git clone [email protected]:账户名/仓库名.git
  3. Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

创建与合并分支

  1. 创建dev分支并切换到dev分支git checkout -b dev,git checkout+ -b等同于git branch dev+git checkout dev
  2. git branch查看所有分支, 在当前分支上会加一个*号.
  3. 在dev上修改文件并git add
  4. 切换回master git checkout master
  5. 合并分支git merge dev
  6. 合并完成后删除dev分支git branch -d dev
  7. 最新版本的git :切换分支:git switch <name>
    创建+切换分支:git switch -c <name>

分支合并图

git log --graph
git merge --no-ff -m "merge with no-ff" dev请注意--no-ff参数,表示禁用Fast forward,加上-m参数是因为因为本次合并要创建一个新的commit.
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

Bug

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动.

feature分支

开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

多人协作

  1. 查看远程库信息,使用git remote -v
  2. 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  3. 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  4. 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  5. 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  6. 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

rebase

  1. rebase操作可以把本地未push的分叉提交历史整理成直线;
  2. rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

创建标签

  1. 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  2. 命令git tag -a -m "blablabla…"可以指定标签信息;
  3. 命令git tag可以查看所有标签。

操作标签

  1. 命令git push origin 可以推送一个本地标签;
  2. 命令git push origin --tags可以推送全部未推送过的本地标签;
  3. 命令git tag -d 可以删除一个本地标签;
  4. 命令git push origin :refs/tags/可以删除一个远程标签.

使用github

  1. 在GitHub上,可以任意Fork开源仓库;
  2. 自己拥有Fork后的仓库的读写权限;
  3. 可以推送pull request给官方仓库来贡献代码。
发布了5 篇原创文章 · 获赞 4 · 访问量 267

猜你喜欢

转载自blog.csdn.net/cheng_dong/article/details/104250274