GIT
分布式版本控制系统,跟踪并管理修改而非文件
1.配置
git config --global user.name "your name"
git config --global user.email "email.@example.com"
- 文件添加到本地仓库 git add(工作区添加到暂存区)
git add readme.txt
- 文件提交到本地仓库 git commit(暂存区提交到版本库)
git commit -m "wrote a readme file"
- 仓库当前状态
git status
- 查看不同 git diff
git diff readme.txt
-
查看提交日志 git log
git log (--pretty=online) -
回退(未 push 到远程仓库,只针对本地仓库)
git reset -- hard HEAD^
回退到上一个版本,HEAD 为当前版本,上一版本则是 HEAD^,上上一版本则是 HEAD^^
git reset --hard 3628165
3628165 为你需要回退的版本号,可通过 git log 查看,版本号不需要写全,只需前几位即可,但一定要唯一
git checkout -- [文件]
说明:git checkout readme.txt,将 readme.txt 在工作区的修改全部撤销
情况一:还未 git add,则回退到版本库一模一样
情况二:已经 git add,则回退到暂存区的状态
针对二:git reset HEAD readme.txt 可以把暂存区的修改撤销掉(unstage),重新放回工作区
- 查看自己的每一次命令
git reflog
- 删除
git rm
- github 建立远程仓库
- 第 1 步:创建 SSH Key。在用户主目录下,看看有没有.ssh 目录,如果有,再看看这个目录下有没有 id_rsa 和 id_rsa.pub 这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开 Shell(Windows 下打开 Git Bash),创建 SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
-
第 2 步:登陆 GitHub,打开“Account settings”,“SSH Keys”页面
然后,点“Add SSH Key”,填上任意 Title,在 Key 文本框里粘贴 id_rsa.pub 文件的内容 -
第 3 步:建立本地库和 github 的链接
新建库
echo "# smart4j" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/admin-wl/smart4j.git
git push -u origin master
已有库和 github 的链接
git remote add origin https://github.com/admin-wl/smart4j.git
git push -u origin master
使用命令 git push -u origin master 第一次推送 master 分支的所有内容
使用命令 git push -u origin master 第一次推送 master 分支的所有内容
- 克隆
git clone 地址
- 分支
- 创建并切换分支(git checkout -b [分支名])
git checkout -b dev
-b 参数表示创建并切换,相当于以下两条命令
git branch dev
git checkout dev
- 创建分支
git branch [name]
- 切换分支
git checkout [name]
- 查看当前分支
git branch
- 合并指定分支分支到当前分支(git merge [指定分支名])
git merge dev
说明: 为 fast forward 合并,看不出来曾经做过合并。
git merge --no--ff -m "test" dev
说明: 合并分支时,加上--no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而 fast forward 合并就看不出来曾经做过合并。
- 删除分支
git branch -d dev
- 查看分支合并图
git log --graph
- 解决 bug 方法
git stash 当前工作现场“储藏”起来,等以后恢复现场后继续工作
恢复 stash
一是用 git stash apply 恢复,但是恢复后,stash 内容并不删除,你需要用 git stash drop 来删除;
另一种方式是用 git stash pop,恢复的同时把 stash 内容也删了
- 强行删除未合并的分支
git branch -D
- 查看远程仓库信息
git remote
- 创建远程 origin 的 dev 分支到本地
git checkout -b dev origin/dev
- 把最新的提交从 origin/dev 抓下来
git pull
- 多人合作
- 查看远程库信息,使用 git remote -v;
- 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用 git push origin branch-name,如果推送失败,先用 git pull 抓取远程的新提交;
- 在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
- 建立本地分支和远程分支的关联,使用 git branch --set-upstream branch-name origin/branch-name;
- 从远程抓取分支,使用 git pull,如果有冲突,要先处理冲突。
- 标签
- 命令 git tag 用于新建一个标签,默认为 HEAD,也可以指定一个 commit id;
- git tag -a -m "blablabla..."可以指定标签信息;
- git tag -s -m "blablabla..."可以用 PGP 签名标签;
- 命令 git tag 可以查看所有标签。
- 命令 git push origin 可以推送一个本地标签;
- 命令 git push origin --tags 可以推送全部未推送过的本地标签;
- 命令 git tag -d 可以删除一个本地标签;
- 命令 git push origin :refs/tags/可以删除一个远程标签。
- 搭建 git 服务器
- 第一步,安装 git:
$ sudo apt-get install git
- 第二步,创建一个 git 用户,用来运行 git 服务:
$ sudo adduser git
- 第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的 id_rsa.pub 文件,把所有公钥导入到/home/git/.ssh/authorized_keys 文件里,一行一个。
- 第四步,初始化 Git 仓库:
先选定一个目录作为 Git 仓库,假定是/srv/sample.git,在/srv 目录下输入命令:
$ sudo git init --bare sample.git
- 第五步,禁用 shell 登录
编辑/etc/passwd 文件完成。找到类似下面的一行:
git❌1001:1001:,,,:/home/git:/bin/bash
改为:
git❌1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git 用户可以正常通过 ssh 使用 git,但无法登录 shell,因为我们为 git 用户指定的 git-shell 每次一登录就自动退出。
- 第六步,克隆远程仓库
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于