git 操作集
命令集
用户
配置用户信息,不然无法提交(修改也是此操作)
git config --global user.name “用户名” git config --global user.email “邮箱地址”
第二种:
git config user.name “用户名”
git config user.email “邮箱地址”
查看用户信息
git config --global user.name git config --global user.email
第二种:
git config user.name
git config user.email
工作区
mkdir my_task # 创建工作目录 cd task # 进入工作目录 git init # 初始化工作区,初始化完成后就可以正常使用了
vim a.py 创建并编辑a.py文件
git status #查看当前目录下文件是否被跟踪 (红色--没有,绿色--以跟踪)
git add a.py #把a.py文件 加入到暂存区(也就是跟踪文件a.py)
更改编辑器
# 如:Emacs
git config --global core.editor emacs
提交文件到仓库(commit)
1、git commit -m "这里写注释" a.py b.py c.py ......可以一直跟已经被跟踪了的文件 2、git commit -m "注释" 后面什么都不跟,默认把被跟踪的文件全都加入仓库 3、git commit -a 展现一个可视化界面,把你想**加入仓库**的文件前面的 **#** 删除 保存 就OK了 4、git stash -u -k 忽略其他文件,把现修改的隐藏起来,这样提交的时候就不会提交未被add的文件 (用于部分提交) 查看提交记录: git log
查看某 commit 具体改动code:
git show {commit_id}
新分支从开发到push remote,再到 merge master
1、测试ok 的代码 git add
2、git commit
3、和remote code 同步:
1) git fetch origin(这个前提本地master分支代码必须是最新的)
2) git fetch origin master
4、如果第三步使用(1)方法: git rebase master
如果第三步使用(2)方法:git rebase origin/master
5、git push origin dev_xxx 开发分支更新为最新版本
6、1)gitlab 上提交merge master 申请
7、如果不需要第六步, 执行下面:
1)git checkout master -------------> 切换到master分支
2)git merge dev_xxx ------------->合并开发分支dev_xxx
3)git push origin master ------------->提交remote
合并两次commit
git rebase -i HEAD~3 # 最新的3个版本合并 或 git rebase -i dfs1231 # 从最新的版本到 dfs1231 版本为止
结果:
pick aa123456 "注释" pick bb123456 "注释" pick cc123456 "注释"
第二:将pick 改为 s(squash 的缩写) 保存即可
pick aa123456 "注释"
s bb123456 "注释"
s cc123456 "注释"
第三:有冲突需要git add ; 没有则直接 git rebase --continue
第四:git push
回退版本
撤销 工作区 与 暂存去的操作
git checkout -- readme.txt // 把readme.txt在工作区的修改全部撤销
git reset HEAD readme.txt // 把readme.txt暂存区的修改撤销,重新放回工作区
回退版本
本地回退:
git reset [commit_id]
撤销已经推送(push)至远端仓库的提交(commit)信息
参数**soft**:保留 工作区的修改 以便重新提交 参数hard:会撤销 工作区的修改 一定要谨慎使用,除非确认不想保留这次修改的内容 第1步:git reset --soft cddfdfds1231312(版本号) # 重置至指定版本的提交,达到撤销提交的目的 第2步:git push origin master --force # 强制提交当前版本号,以达到撤销版本号的目的
PS:如果是 hard 参数,那么本地文件也会被删除
强制提交: git push -f origin master
远程仓库配置
查看远程仓库
git remote
git remote -v
删除远程仓库
git remote remove 远程仓库地址
例子:git remote remove origin
添加远程仓库
git remote add origin(别名) https://github.com/ChinaTengFeng/hello-world.git (远程地址)
修改远程仓库
git remote rename origin(旧名称) new_name(新名称)
克隆项目
pull别人的项目(克隆别人)
git clone https://xxxxxx.com/xx(目标地址)
删除克隆的项目整个文件夹
rm -rf test(文件夹名称) ls -a 查看所有文件(包含隐藏文件)
克隆的项目提交到自己的git上:
1. 删除克隆项目的orgin : git remote remove origin
2. 创建commit(可选)
3. 更换远程仓库: git remote add origin https://gitee.com/TengOne/proxy-project.git
4. 提交: git push --set-upstream origin master
分支
git branch (查看分支)
git branch -a (查看远程分支)
git branch xxx (创建 xxx 分支)
git checkout xxx (切换到 xxx 分支)
git push origin xxx (提交分支,第一次会自动帮你创建 xxx 分支)
git merge xxx (合并分支)
git branch -D <branch_name> 删除分支
git checkout -b xxx 创建分支
git push origin --detele xxxx 删除远程分支
#等同pull操作,
git fetch origin && git rebase origin/dev_xxx
1、 git fetch origin ----> 默认获取 master 分支代码, 并更新索引
2、 git rebase origin/dev_xxx -------> 以远程dev_xxx 分支为基点, 最新提交的commit 会添加在其后面,
(git rebase master 以本地 master分支为基点, 最新提交commit 会添加在其后, 注意:本地master最好是最新版本)
两个分支相互合并:
git cherry-pick:
理解何为”挑拣”提交,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。 当我们需要在本地合入其他分支的提交时,
如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就要使用git cherry-pick了 背景: 分支1 合并 分支2 1、分支2 是在 分支1 基础上 创建的开发分支 2、在分支2开发完成,并push到远程分支2 3、切换到分支1, 4、执行合并:git cherry-pick xxxx(分支2的版本号) 两个非master分支合并: 如: dev1 合并dev2 git checkout dev1 git pull origin dev2 git merge 会有下面问题: 在一个分支上多次commit后,将分支合并至主干时默认会提交该分支下的所有提交记录,这并不是我想要的,我只想合并时汇总一条提交记录到主干即可。 解决办法: 合并分支时加参数–squash,用法:【git merge --squash 分支名】
stash命令
PS:可用于临时保存和恢复修改,可跨分支。
git stash [save message] # 保存,save为可选项,message为本次保存的注释git stash push -k# 只保存未添加到暂存区的内容 (也就是没有add 的) git stash list # 所有保存的记录列表 git stash pop stash@{num} # 恢复,num是可选项,通过git stash list可查看具体值。只能恢复一次 git stash apply stash@{num} # 恢复,num是可选项,通过git stash list可查看具体值。可回复多次 git stash drop stash@{num} # 删除某个保存,num是可选项,通过git stash list可查看具体值 git stash clear # 删除所有保存
git stash push --keep-index # 忽略 add 过的文件
show 命令
# 查看特定提交中的文件 git show abc1234:example.txt # 查看某个分支中的文件: git show master:example.txt # 查看某个标签中的文件: git show v1.0:example.txt # git show 会输出 ->文件 git show abc1234:example.txt > output.txt
改动日志查看
若果感觉有点乱,可以使用
git log --pretty=oneline让日志单行显示
git log : 查看项目日志 git log file : 查看某个文件日志 git log . :查看本目录日志 git reflog: 查看详细做了啥
修改注释
(进入编辑模式修改的只是注释而已,其它的不要管)
修改最新提交到仓库的一条
git commit --amend
在修改注释(第一行)保存就行
修改之前的某次注释
第一步:
git rebase -i head~2 # 数字2指的是显示 到 最后 第2次 比如这个输入的2就会显示最后的两次注释(git log 最上面的两行)
第二步:
你想修改哪条注释 就把哪条注释前面的pick换成edit。
方法:编辑方式:按 i 进入编辑模式,把pick换成edit, 按 Esc 退出编辑模式, 按shift + 冒号(:),输入 :wq, 按回车
第三步:
git commit --amend # 修改注释, 保存并退出
第四步:
git rebase --continue
修改已经push的注释
1、首先,你把最新的版本从远程仓库先pull下来,
2、修改的方法都如上,
3、最后修改完成后,强制push到远程仓库:
git push --force origin 【分支】
注:很重要的一点是,你最好保证在你强制push之前没有人提交代码,如果在你push之前有人提交了新的代码到远程仓库,然后你又强制push,那么会被你的强制更新覆盖!!!
修改 Author 值:
由于我们的主要目的是修改提交者的信息,因此光用
git commit --amend是不够的,
我们要使用
git commit --amend --author "baurine <2008.hbl@gmail.com>"
这样的操作,这一点是修改提交者信息的关键所在。
解决error: failed to push some refs to 'xxx(远程库)'
出现错误的主要原因是本地仓库中的文件与远程仓库文件不一样
首先:把最新的远程仓库中的代码拉取下来
git pull --rebase origin master
再次提交:
git push -u origin master
转换本地连接远程git的地址
注:http 连接 转换成 ssh连接
在你git clone项目后,只需将.git/config文件中:
url = http://xxx.com/Name/project.git 改为 url = git@xxx.com/Name/project.git 测试ssh-key:
ssh -T git@xxx.com
# 查看详情
ssh -Tvv git@xxx.com # git@xxx.com 你的git仓库地址

浙公网安备 33010602011771号