Git(一)操作总结

cd    ~/桌面/      切到家目录的桌面文件夹下

mkdir    test_project     创建一个test_project的空文件夹

cd    test_project      切到test_project目录下

git    init     将当前目录初始化为一个git仓库

ll    查看当前test_project下目录下的文件

ll    .git    查看.git目录下的文件 

touch     test1.txt    test2.txt    test3.txt         创建三个测试文件

mkdir    ignoreDir             创建一个文件夹,用来测试git  ignore

 touch    ignoreDir/ignoreFile1.txt

git    status      查看当前git仓库的各种状态信息。现在新建的几个文件都还没有被git跟踪,不是版本文件

 git    add   .       将所有非版本文件添加进git,将所有版本文件的改动添加到暂存区,当然git  add 后面也可以跟单个文件,或者通配符。运行后执行git    status

git    rm   -r     --cached     ignoreDir/       将ignoreDir文件夹下面的所有文件移除版本控制,这里加了-r表示递归删除。当然也可以不加-r,直接移除单个文件,或者使用通配符。然后git    status,会继续提示ignoreDir/不是版本文件

ignoreDir目录下面的文件夹是我们不想进行版本控制,可以创建一个.gitignore文件,配置忽略的文件,在JavaWeb开发中,maven项目中的target目录,日志文件,集成开发环境生成的配置文件等都需要配置为不需要跟踪

touch    .gitignore

vim    .gitignore          添加ignoreDir为git忽略的文件

保存后  git   status

git    add    .gitignore       将.gitignore添加到版本文件

git    commit    -m    "[add]添加test1~test3三个测试文件,添加.gitignore文件"                   提交到本地仓库

 git    log                   查看当前分支的提交记录,也已在后面接分支名   比如  git   log   branch_1.  可以看到当前分支的HEAD在上一次提交上,8b9a981......这一串数字是一次提交的id

vim    test1.txt        在test1.txt中添加一行    "test1的第一行" 

vim    test2.txt        在test2.txt中添加一行     "test2的第一行"

git    diff       比对工作区和暂存区之间的差异, git   diff    [path] 比对指定路径的差异

git    diff    [commit-id]    [path]    比对指定提交和工作区的差异

git    diff    --cached    [commit-id]    比对指定提交和暂存区的差异

git    diff    [commit-id]    [commit-id]    比对两次提交之间的差异

git    add    .              将test1.txt和text2.txt的改动添加到暂存区

git    reset    HEAD    test2.txt      将test2.txt的修改移除暂存区

git    commit    -m    "[add]在test1.txt中新加了一行"        将test1.txt的修改提交

git    add    .  将test2.txt的修改添加到暂存

git    commit    -m     "[add]在test2.txt中新加了一行"         将test2.txt的修改提交,  这时候已经有三次提交了,git  log可以看到提交记录

git    rebase   -i    HEAD~2           将两次最近的两次提交压缩为一个提交。

rebase命令还用于分支合并,两个分支合并,或者本地分支和远程分支合并(git   pull如果本地分支和远程分支存在分叉,就会自动合并),合并过程中会产生一次新的提交,让提交记录不那么清晰明了,使用rebase可以避免分叉,让提交是线性的。但是rebase可能会改变原有的提交,如下图所示,rebase后,c5这次提交直接在c4基础上了,无法还原c5这个提交。在开发过程中,合并分支最好不要用rebase,在自己单独的分支开发的时候,可以考虑使用rebase压缩提交。

 

将cef9c4b的提交前面的  pick改成 s,表示将这次提交压缩到它的父提交,修改完后保存,会跳转到一个编辑注释的页面,写完注释后保存,然后git    log,可以看到之前HEAD和HEAD前面的一个提交被压缩成了一个新的提交

 mkdir     ../test_project_local          创建一个和test_project同级的目录

cd    ../test_project_local                   切到刚才创建的目录

git   clone    /home/fengxing/桌面/test_project           将test_project的git仓库克隆到当前路径

cd    test_project                         切换到刚刚clone的git仓库,把test_project_local下面的仓库作为本地仓库,test_project下面的仓库作为远程仓库

git    checkout     -b    branch_1    origin/master              基于远程的master分支创建一个名为branch_1的分支

这个命令相当于  git   branch  branch_1    origin/master    +     git   checkout  branch_1 ,先创建一个分支,然后切换到创建的那个分支.  branch_1的远程分支是master分支,需要将跟踪的远程分支设置为同名的分支

git    push   --set-upstream    origin    branch_1        将当前分支跟踪的远程分支设置为远程的branch_1分支

或者使用git   push  -u    origin    branch_1

git    branch    -a           查看当前所有的分支

在branch_1分支上在test.txt中添加一行, "本地的branch_1分支在test1.txt中增加一行"

在branch_1分支上在test2.txt中添加一行, "本地的branch_1分支在test2.txt中增加一行"

git    checkout    test2.txt             checkout除了切换分支,还可以用来丢弃工作区的修改(感觉git命令的设计有点混乱),执行这个命令后上一步对test2.txt的修改留丢失了

git    add    .

git    commit     -m    "[add]本地的branch_1分支在test1.txt中增加一行"

git    checkout    master

在master分支的test.txt文件也添加一行, "本地的master分支在test1.txt中增加一行" 

git    commit    -m    "[add]本地的master分支在test1.txt中增加一行"      这时候本地的master分支领先远程master分支一个提交

git    tag    -a   matser_test1_add_one_column_tag    -m    "本地的master分支在test1.txt中增加一行"      给上一次提交打了一个标签,tag相当于一种标记,这里打标记是为了后面回退版本方便,在实际开发中,可以用tag标记项目的版本叠代

git    tag    -a    [tag名]    [commit-id]    -m    [tag的注释]  没有commit-id默认用当前的头创建tag

git    tag     查看所有的tag 

git    show    [tag名]     显示一个tag的详细信息

git    push    origin    [tag名]     将tag推送到远程

git     tag    -d    [tag名]     删除本地tag

git    push    --delete    origin    [tag名]     删除远程tag

  

git    reset    --hard   origin/master  将本地master分支回退成和远程master分支一样,  origin/master表示一次提交,这里origin/master就是本地master的上一个提交,当然也可以直接用commit-id表示,等价于

git  reset   --hard   0d3630028f484918316d9eacfcc9c3c36c51ca6a

--hard          回退到版本之后的修改直接丢失

--soft           回退版本之后的修改到暂存区

--mixed       到工作区

git    reset    --hard    matser_test1_add_one_column_tag         再重置回来,将master分支的头放到matser_test1_add_one_column_tag上

git    merge    branch_1       当前在master分支,这表示将branch_1分支合并到master分支,branch_1分支不会做任何改变,由于master和branch_1都改变了test.txt文件,所以合并会有冲突

vim    branch_1     解决冲突后  add  , commit再次提交

git    add    .

git    commit    -m    "[merge]合并branch_1到master,解决了test1的冲突"     这里可以看到,合并分支会产生一次提交,在开发过程中因为分支合并会产生合同多余的提交

git    push    origin    master        推送到远程的master分支,origin是远程仓库的别称

git    remote    -v            查看配置的远程仓库的信息

git    remote    add    [远程仓库名]    [远程仓库地址]      添加远程仓库

git    remote    rm     [远程仓库名]              删除远程仓库

push的时候报这个错误,百度一圈也没弄明白怎么回事

很多地方说在远程仓库的.git/config中加入

[receive]

        denyCurrentBranch = ignore

如:http://blog.sina.com.cn/s/blog_5dc29fcc01011hvr.html

直接git  push 默认将当前分支推送到远程同名的分支,

如果当前分支在master,运行git push  origin branch_1, 会把 本地branch_1的提交推到远程branch_1。

push的时候如果本地分支落后远程,推送将被拒绝,需要先pull   

当本地分支和要推送的远程分支不同名时,可以指定远程分支名

git    push    origin    HEAD:[远程分支名] 

git  pull    从远程分支拉代码,git  pull后面也可以接分支名,不跟分支名默认从当前跟踪的分支拉代码。

git  pull相当于git  fetch  +  git  merge,当本地分支和远程分支之间存在分叉的时候,会自动做一次merge,merge过程中出现冲突会提示解决冲突。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值