git常用操作
git的常用操作
创建仓库
创建仓库分为两种情况
- 直接克隆git服务器建好的仓库
- 本地先初始化仓库后管理git服务器仓库
直接克隆
git clone git@git.cnsuning.com:xxx/xxxx.git
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master //-u是--set-upstream的简写目的是关联本地和远程本质
复制代码
本地先初始化
这种情况需要初始化一个本地仓库,然后,将本地仓库的源指向服务器
git init
git remote add origin git@opensource.cnsuning.com:18044854/qwe.git
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
复制代码
创建分支
- 以本地分支为基础创建分支
- 以远程分支为基础创建分支
以本地分支为基础
创建分支时,以本地当前所在的分支为基础,创建分支
git branch <branchName> //新建分支
git checkout -b <branchName> //新建分支并切换到新分支
复制代码
这种情况如果你本地的分支有已commit但未提交的代码,会被一并clone过来
以远程分支为基础
创建分支时,可以指定远程某个分支为基础,创建分支,这种创建方式创建本地分支后,本地分支会自动与远程分支进行关联
git checkout --track origin/<branchName> //以远程分支为名创建本地分支
git checkout -b <branchName> origin/<branchName> //可以指定本地分支名
复制代码
提交代码
git add <file>
git commit -m "xxx"
git pull origin <branchName> //如果是需要推送到远程新的分支可以忽略这一步
git push origin <branchName>
复制代码
查看日志
常用参数
--pretty=oneline以一行显示-p显示每个文件的详细信息
常用命令
git log查看所有历史git log <fileName>查看某个文件的提交历史git show <commitHash>查看某次commit的提交记录git log --graph查看分支生命周期
代码回滚
git reset
git reset <commitHash>将分支的头部指向这次commit,默认会将被撤销的commit记录保留在你的暂存区
git reset --hard <commitHash>被撤销的commit记录保留不会被保留
git revert
git revert <commitHash>用一次相反的提交覆盖原来的代码,达到回滚的目的。这种方式更灵活,可以针对某一次的commit进行回滚
分支合并
当前所在分支为所需合并到的分支
git merge <branchName>
git merge --no-ff <branchName>
git merge --squash <branchName>
复制代码
当发生冲突时
- 撤销这次合并,将分支初始化到合并前的状态
git merge --abort - 解决冲突后,
git add命令把文件添加到暂存区。继续执行git merge --continue命令编辑新生成的提交的log信息。然后merge完成。
tag
git tag //查看tag
git tag test_tag c809ddbf83939a89659e51dc2a5fe183af384233//在某个commit 上打tag
git tag
git push origin test_tag//!!!本地tag推送到线上
git tag -d test_tag//本地删除tag
git push origin :refs/tags/test_tag//本地tag删除了,再执行该句,删除线上tag
复制代码
一些其他的常用命令
git checkout .清除工作区所有尚未add的文件git checkout -- <fileName>清除工作某个尚未add的文件git reset HEAD <fileName>清除工作某个已add的文件git branch --set-upstream-to=origin/remote_branch your_branch手动关联本地与远程分支git checkout --ours .当发生冲突时全部采用传入的修改git checkout --theirs .当发生冲突时全部采用本地的修改git push origin --delete <branchName>删除远程分支git diff <branchName> <branchName> --stat查看两个分支有差异的文件git diff <branchName> <branchName> <fileName>查看两个分支具体某个文件的差异git diff <branchName> <branchName>查看两个分支所有文件的差异git remote update获取远程最新分支git remote prune origin --dry-run查看是否有已被删除的远程分支git remote prune origin修剪远程已被删除的分支git commit --amend修改最近一次的提交信息,并且将已add的修改合并到一个commit中
rebase
对commit进行各种修改
操作步骤
- 选择操作的起点位置,
git rebase -i SHA1 - 指定每个节点的操作方式,保留/删除/修改/...,进入操作
- 进入下一步操作/终止操作,
git rebase --continue,git rebase --abort
例子
比如要修改B节点的commit信息,则需要进去B节点之前的A节点
git rebase -i A节点的hash值
复制代码
此时会进入一个交互窗口
pick B 0406b6
pick C 39a9c2
pick D 3131e0
复制代码
修改节点前对应的操作,然后保存,就可以对节点进行编辑
操作指令有:
pick,保留节点,不做任何变更edit,保留节点,修改内容drop,删除节点,删除本次提交reword,保留节点,修改提交信息squash,保留节点修改,并且与上一个节点合并,也就是两次提交并做一次fixup,保留节点修改,忽略本次提交信息exec,run command (the rest of the line) using shell
用的比较多的是前三个,可以只关注前三个。我们需要修改下交互窗口的内容,改为(第二步):
+ edit B 0406b6
- pick B 0406b6
pick C 39a9c2
pick D 3131e0
复制代码
上面是 diff,实际内容是:
edit B 0406b6
pick C 39a9c2
pick D 3131e0
复制代码
此时会进入一个临时 git 分支,大致是这样:
branch(0406b6):
复制代码
由于你告诉了 git 要对 B 节点就行修改,所以它就停在了 B 处理,等着你修改,此时,你可以通过 amend 命令修改提交信息:
branch(0406b6): git commit --amend
# 进入交互窗口,将 commit 信息修改为 push B
复制代码
操作完成后,执行(第三步):
git rebase --continue
复制代码
由于你告诉 git 只需要操作一个节点,所以它会回到最初的位置<当前>,否则的话,它会继续进入下一个临时 git 分支。当然,如果你进入第三步以后,突然又不想修改了,可以执行:
git rebase --skip