随手记

安装

配置用户名、邮箱

创建版本库

把文件添加到版本库(暂存区)

提交到本地代码库

仓库当前的状态

git status小结

对比文件修改了什么内容

查看提交的日志

回退到上一个版本

查看命令历史

撤销修改

提交到远程代码库

关联远程库

创建SSH_Key

查看所有分支

切换分支

合并分支

删除掉dev分支

分支小结

解决冲突

分支管理策略

强行删除分支

多人协作

更新远程库的代码到本地

添加标签

操作标签

查看远程库的信息

删除已关联的名为origin的远程库

忽略特殊文件

强制添加忽略的文件

检查添加文件是否被忽略

设置命令别名

配置文件


随手记

1、分布式版本控制系统
记录每次文件的改动,并且可以协作编辑

1、基本操作

目录

安装

// Debian/Ubuntu Linux 
sudo apt-get install git

// 其他linux版本,源码安装
git官网 https://git-scm.com/
下载源码,然后解压,依次输入
./config 
make
sudo make install

//mac osx 
通过homebrew安装 
homebrew官网: http://brew.sh

目录

配置用户名、邮箱

git config --global user.name zhangyongfeng1

git config --global user.username zhangyongfeng1
//配置用户名

git config --global user.email 503977995@qq.com
//配置邮箱

git config --global user.name
//没有传参数时,查询当前配置的用户名

目录

创建版本库

ubuntu:~/environment $   mkdir learngit
ubuntu:~/environment $     cd learngit
ubuntu:~/environment/learngit $     pwd
/home/ubuntu/environment/learngit
ubuntu:~/environment/learngit $ git init
Initialized empty Git repository in /home/ubuntu/environment/learngit/.git/
ubuntu:~/environment/learngit (master) $ ls -al
total 12
drwxrwxr-x 3 ubuntu ubuntu 4096 Apr 26 06:02 .
drwxr-xr-x 6 ubuntu ubuntu 4096 Apr 26 06:00 ..
drwxrwxr-x 7 ubuntu ubuntu 4096 Apr 26 06:02 .git

目录

把文件添加到版本库暂存区

// 添加文件
git add <file>
//在learngit目录下新建 一个文件readme.md
git add readmne.md
git add . 
//当前目录下的文件全部提交

目录

提交到本地代码库

git commit -m <message>
git commit -m 注解信息

目录

仓库当前的状态

git status

On branch master
nothing to commit, working tree clean
//工作目录是干净的

On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

modified: readme.txt

目录

gitstatus小结

要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

目录

对比文件修改了什么内容

git diff <filename>

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.

目录

查看提交的日志

git log

git log --pretty=oneline

目录

回退到上一个版本

get reset
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,
使用命令git reset --hard commit_id。


在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

git reset --hard HEAD^ 
//回退到上一个版本

git reset --hard 772a2f
//回到指定的版本号 

目录

查看命令历史

git reflog

用来记录你的每一次命令:

目录

撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

目录

提交到远程代码库

git push 

git push origin master

目录

关联远程库

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

目录

创建ssh_key

由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

github-addkey-1

点“Add Key”,你就应该看到已经添加的Key:

github-addkey-2

目录

查看所有分支

git branch 
创建分支:git branch <name>
git branch命令会列出所有分支,当前分支前面会标一个*号。

目录

切换分支

git checkout 分支名 
git checkout master 

目录

合并分支

git merge dev

目录

删除掉dev分支

git branch -d dev 

Deleted branch dev (was b17d20e).
删除后,查看branch,就只剩下master分支了:
git branch
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

目录

分支小结

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

目录

解决冲突

主线和分支修改的文件一样时,合并之后会报文件有冲突

用带参数的git log也可以看到分支的合并情况:
git log --graph --pretty=oneline --abbrev-commit -10

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

用git log --graph命令可以看到分支合并图。

目录

分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

目录

强行删除分支

git branch -D feature-vulcan

目录

多人协作

多人协作的工作模式通常是这样:

首先,可以试图用git push origin <branch-name>推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

目录

更新远程库的代码到本地

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 <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

命令git tag可以查看所有标签。

目录

操作标签

git tag -d v0.1

小结
命令git push origin <tagname>可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签;

命令git tag -d <tagname>可以删除一个本地标签;

命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

目录

查看远程库的信息

git remote

查看更多的信息
git remote -v

目录

删除已关联的名为origin的远程库

git remote rm origin
先关联GitHub的远程库:

git remote add github git@github.com:michaelliao/learngit.git
注意,远程库的名称叫github,不叫origin了。

接着,再关联码云的远程库:

git remote add gitee git@gitee.com:liaoxuefeng/learngit.git
同样注意,远程库的名称叫gitee,不叫origin。

现在,我们用git remote -v查看远程库信息,可以看到两个远程库:

git remote -v
gitee    git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee    git@gitee.com:liaoxuefeng/learngit.git (push)
github    git@github.com:michaelliao/learngit.git (fetch)
github    git@github.com:michaelliao/learngit.git (push)
如果要推送到GitHub,使用命令:

git push github master
如果要推送到码云,使用命令:

git push gitee master
这样一来,我们的本地库就可以同时与多个远程库互相同步:

目录

忽略特殊文件

.gitignore

目录

强制添加忽略的文件

git add -f App.class

目录

检查添加文件是否被忽略

git check-ignore -v App.class

目录

设置命令别名

git config --global alias.st status
//状态
git config --global alias.co checkout
//更新
git config --global alias.ci commit
//提交
git config --global alias.br branch
//分支

git config --global alias.unstage 'reset HEAD'
//命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区。既然是一个unstage操作,就可以配置一个unstage别名:

git unstage test.py
=git reset HEAD test.py

git config --global alias.last 'log -1'
//配置一个git last,让其显示最后一次提交信息
git last

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

目录

配置文件

.git/config

cat ./git/config

搭建见廖老师教程