一、git安装之后的先配置环境变量

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
1 git version #查看git的版本

git常用命令行 随笔 第1张

1 git config --global user.name "vhjmhk" #设置全局使用者名称
2 git config --global user.email "vhjmhk@163.com" #设置全局使用者邮箱
cat ~/.gitconfig #可以去家目录的.gitconfig 文件里面查看git的配置

git常用命令行 随笔 第2张

 


二、git建立仓库

 

1 git init #初始化一个新的git仓库,默认初始化一个master 的分支

git常用命令行 随笔 第3张

1 git status #查看git仓库状态

git常用命令行 随笔 第4张

提示存在一个没有路径的文件test.sh,git不知道该如何去去处理这个新文件,master隔壁多了一个*,git提示可以使用 git add <file>... 命令来添加这个文件

 

1 git add test.sh #可以将新文件暂存起来
2 git add -A #一次将目录下所有的文件缓存起来

git常用命令行 随笔 第5张

提示产生了一个新文件test.sh,git提示可以使用 git rm --cached <file>... 来删除缓存区的文件

 

1 git rm --cached test.sh #可以把缓存区的文件删除

git常用命令行 随笔 第6张

 

1 git commit -m 'annotation' #将缓存区的文件提交到本地的git仓库中,-m后面跟此次改动的注释

git常用命令行 随笔 第7张

而且*也随之消失

 

1 cat .git/index #git缓存区的文件保存记录

git常用命令行 随笔 第8张

 

1 git remote add origin https://github.com/vhjmhk/git-tutorial.git #连接到远端的github仓库(http的方式),默认远端的仓库的名字为origin(约定俗成的名字)
2 git remote -v #查看已连接的远端仓库,我们可以fetch,push来推和拉

git常用命令行 随笔 第9张

 

1 git push origin master -u #将本地的git仓库里面保存的文件

git push 远端仓库名字 分支
-u是设置成默认的远端仓库,下次要使用的时候,直接使用 git push 即可
有时候需要输入密码,可以做ssh免密校验

1 git push origin feature1 #可以将feature1分支保存到远端的仓库上
2 git push origin feature1:f1 #将feature1分支在远端保存为f1分支
3 git push origin :feature1 #删除远端feature1分支

git常用命令行 随笔 第10张

 

1 git clone https://github.com/vhjmhk/git-tutorial.git git-clone #从远端的GitHub仓库克隆一个库下来,并设置本地库名为git-clone,不输入库名,默认和远端库名字一样,即git-tutorial

git常用命令行 随笔 第11张

git常用命令行 随笔 第12张

 

git checkout -- <file>... 将文件还原到上一个状态

修改文件并传到远端仓库

git常用命令行 随笔 第13张

 

git pull 拉取到远端的代码,将远端库的代码拉取到本地

1 git pull origin master

git常用命令行 随笔 第14张

 

三、git分支操作

 

git branch feature1 #建立一个名字是feature1的分支,名字可以自己起

git常用命令行 随笔 第15张

 

1 git checkout feature1 #切换到feature1的分支里面

git常用命令行 随笔 第16张

 

1 git checkout -b feature2 #在分支一里面创建一个新的分支,并切换到新的分支里面去

git常用命令行 随笔 第17张

 

1 git branch -d feature2 #删除一个feature2的分支

git常用命令行 随笔 第18张


因为feature2里面还有新文件没有同步到master里面,所以git不允许我们删除feature2分支,也可以使用  git branch -D feature2  来强制删除,一般在git里面都是比较慎重的选项

 git merge feature2  将feature2分支的文件合并到master(当前分支里面)将master的指针指向feature2

 git常用命令行 随笔 第19张

 

四、git合并

 

1 git log #查看git的操作日志

--oneline 以一行的形式来显示,看起来比较短小
git log --oneline -3 只输出前3行的数据
git常用命令行 随笔 第20张

git常用命令行 随笔 第21张

git常用命令行 随笔 第22张

 

1 git show 1333068 #查看某一次修改的具体操作

git常用命令行 随笔 第23张

 

常用的可视化管理log参考:https://stackoverflow.com/questions/1057564/pretty-git-branch-graphs

可视化来管理log
在~/.gitconfig 文件里面加入别称

root@controller01 ~/git-tutorial [master]
± # cat~/.gitconfig
[user]
name = vhjmhk
email = vhjmhk@163.com
[alias]
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
lg = !"git lg1"
dog = log --all --decorate --oneline --graph

 

使用  git lg /git lg1 

git常用命令行 随笔 第24张

 

使用  git lg2 

git常用命令行 随笔 第25张

 

使用  git dog 

 git常用命令行 随笔 第26张

 


git merge feature1 使用merge的方式来合并的时候,默认使用Fast-forward,不会产生新的分支,前提是没有冲突
可以使用  git merge feature1 --no-ff  会创建一个新的合并节点,在我们合并的同时产生一个新的commit的提交,可以保持原有的开发分支,整个提交链的完整性。会产生一个新的分支,可以看到比较完整的先后路径

git常用命令行 随笔 第27张

 

git rebase 将feature分支移动到到master分支的最后一次提交,把master最后的操作同步过来,使用rebase可以持续的保持一条竖线,保持整洁,但是会带来一些安全和可跟踪性问题。

注:绝对不要在公共的master分支上使用rebase

git常用命令行 随笔 第28张

merge是一个合并操作,它会将两个分支的修改合并在一起,默认中是不会提交合并中修改的内容的,merge的提交历史会被记录,注重的是提交记录的真实性。
rebase是没有合并操作的,他只是将当前分支的修改复制到目标分支的最后一次提交上面,关注点是开发的过程,rebase的log可以反应这个过程发生了什么
可能使用merge会多一些

 

分支冲突

git常用命令行 随笔 第29张


可以使用 git mergetool 

git常用命令行 随笔 第30张

 

推荐使用 vimdiff 来进行比较

git常用命令行 随笔 第31张

 

修改完成后

git常用命令行 随笔 第32张

a.txt.orig 是冲突产生时的临时文件,不需要保存
提交修改并查看log

git常用命令行 随笔 第33张

git常用命令行 随笔 第34张

会产生一些弯曲的线条
实际情况下,其实合并其实还是会使用工具完成的

 

五、Git回滚和撤销

 

在提交操作完成之后,突然又不想要这个文件,想回到上一个版本的状态

git常用命令行 随笔 第35张

git常用命令行 随笔 第36张

 

 git reset master^  将git仓库回归到上一次的版本的状态,回退两次可以使用  git reset master^^  ,回退n次,可以使用  git reset master~n  ,可以回到前n次,这属于相对撤销的方式,也可以使用  git reset --hard HEAD^  功能一样

git常用命令行 随笔 第37张

文件依然存在,但是没有被git托管

 

git reset 7f0abc2 在后面加版本号可以回到该版本,这属于绝对撤销

git常用命令行 随笔 第38张


常用的选项
--soft 这个模式下的reset,工作目录和暂存区的文件都不会被丢弃,只是移动了commit指针而已
--mixed 这个模式会把暂存区的文件丢弃,但不会动到工作目录的文件
--hard 这个模式下,工作目录以及暂存区的文件都会被丢弃

git常用命令行 随笔 第39张

 

 git reflog  还可以查看之前回退之前的版本(在git log里面看不见),在回退之后,还可以再次回退到回退之前的版本

git常用命令行 随笔 第40张

 

git revert 可以撤销某次操作,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交。

使用  git log  查看日志

git常用命令行 随笔 第41张

 

产生新的注释

git常用命令行 随笔 第42张

git常用命令行 随笔 第43张

git常用命令行 随笔 第44张

 

git revert 撤销某次操作,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交。git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。相比 git reset,它不会改变现在的提交历史。
在master的分支上应该使用revert,将记录保留下来,可以回溯。
在自己的分支上,可以使用reset来直接回退。

 

六、ignore和fork


有一些.idea、.settings和.classpath 等无用的硬盘配置文件、编译生成的中间文件、可执行文件、敏感的配置文件和本地不想提交的脚本文件,都不需要同步,需要忽略掉它
先创一个 .gitignore 文件
在里面写入你要忽略文件的条件,而且你要忽略的文件不可以被git托管,如果被托管你需要手动撤销掉

git常用命令行 随笔 第45张

https://www.gitignore.io/ 可以自动生成 .gitignore 文件,输入相应的语言(如:java、python)即可生成相应的,应当忽略的文件

1 git remote add upstream https://github.com/jobbole/awesome-java-cn.git #设置上游仓库
2 git fetch upstream (分支) #将远端的上游仓库的某一个分支的代码拉到本地,默认是master分支

pull = fetch + merge pull会自动合并

1 git branch -r #可以查看远程的分支upstream/master
2 git rebase upstream/master #要更新远端fork仓库的数据,没有自己的修改,只用rebase就够了,如果你有自己的贡献,就需要使用merge来合并分支

 

七、GitHub的ssh免密推送

官方文档
https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#adding-your-ssh-key-to-the-ssh-agent

  1. 开启终端

  2. 粘贴下面的文本,替换您的GitHub电子邮件地址。

    $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

    这将使用提供的电子邮件作为标签创建一个新的ssh密钥。

    > Generating public/private rsa key pair.
  3. 系统提示您“输入要保存密钥的文件”时,按Enter键。使用默认文件位置。

    > Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]
  4. 在提示符下,键入安全密码。其实可以不使用密码,有一些应用可能需要写入密码

    > Enter passphrase (empty for no passphrase): [Type a passphrase]
    > Enter same passphrase again: [Type passphrase again]

将SSH密钥添加到ssh-agent

在将新的SSH密钥添加到ssh-agent以管理密钥之前,您应该检查现有的SSH密钥生成新的SSH密钥

  1. 在后台启动ssh-agent。

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
  1. 将SSH私钥添加到ssh-agent。如果使用其他名称创建密钥,或者要添加具有不同名称的现有密钥,请将命令中的id_rsa替换为私钥文件的名称。

    $ ssh-add ~/.ssh/id_rsa
  2. 将公钥里面的文件复制到GitHub的新建ssh选项中

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄