Git常用命令_Aron
2024-08-20 09:37:13 16 举报
AI智能生成
Git常用命令,希望大家喜欢,多多点赞.
作者其他创作
大纲/内容
更新代码/合并
git rebase
简介
在把从其他开发者处拉取的提交 应用到本地
将当前分支和上游分支进行合并
例: dev有一个commitId
新建一个分支power
此时,Dev上有新的提交点CommitId
git rebase dev 将Dev的提交合并过来
此次操作可能提示error,补丁失败,但不影响正常rebase
git rebase -i
很强大的命令
很强大的命令
格式
git rebase [-i | --interactive] [options] [--onto ] []
git rebase [-i | --interactive] [options] –onto –root []
git rebase –continue | –skip | –abort
合并压缩提交
压缩或修改多个Commit
git rebase -i HEAD~[number_of_commits]
git rebase -i HEAD~2
- HEAD~2 表示合并最近两次的提交, 如果想合并最近三次的提交修改为
- git rebase -i HEAD~3
将第二行的 pick 改为 s “s” 为 “squash” 的缩写
“squash” 的意思是 将倒数第二次提交 压缩为最后一次提交
然后保存
“squash” 的意思是 将倒数第二次提交 压缩为最后一次提交
然后保存
压缩:把要修改的提交点 pick改成s或者squash
修改 pick改成 r或reword
调整最近几笔commit的顺序
git rebase -i HEAD~3
会进入vim普通模式,输入 ddp,就可以调换最近两笔的顺序
fetch+rebase
git fetch origin dev
git rebase origin/dev 或者 git rebase (默认当前分支)
3如果有解决冲突
git add .
git rebase --continue
fetch+merge
回退/撤销
git reset
git reset --hard commit_id 回退到上一提交点,工作区代码也会回退
代码回退到当前提交点,工作区代码也会回退
回退当前提交点的add和commit以及代码操作
git reset --soft commit_id
回退当前提交点之前的commit操作,会保留本地代码
git reset commit_id
回退当前提交点之前的add和commit的操作
git reset --hard HEAD~3
会将最新的3次提交全部重置,就像没有提交过一样。
git reset 撤销上一次add .
注: 要回退已经push到服务器的提交点,只能使用git revert
放弃本地代码
git reset --hard FETCH_HEAD
如果想放弃本地的文件修改,可以使用git reset --hard FETCH_HEAD,FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull.
git revert
回退并生成一个新的提交点,适用于上一提交点已经push到服务器了,
git revert HEAD
撤销当前的提交点,回到前一个提交点的代码,但会生成新的提交点,这就是与reset --hard的区别,注:但本地有修改会失败
git revert HEAD~1 -m 1
git revert HEAD~1
只撤销倒数第二次 commit,会保留倒数第一次的提交点
git revert HEAD~1 -m 0
git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本
注: 本地revert不会生成ChangerId
git checkout --<bad_file>
pull
会影响github端的network图 不建议使用pull
git pull <远程主机名> <远程分支名>:<本地分支名>
取回origin主机的next分支,与本地的master分支合并,需要写成下面这样
git pull origin next:master
远程分支是与当前分支合并,则冒号后面的部分可以省略
git pull origin next
实质上,这等同于先做git fetch,再做git merge
git fetch origin
git merge origin/next
git merge origin/next
如果合并需要采用rebase模式,可以使用–rebase选项。
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
push 到远程服务器
git push --set-upstream origin dev 提交到服务器并在服务器新建dev分支
举例
git push --set-upstream iReader R1001_BtPage
git push --set-upstream iReader R1001_Dict
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin dev:develop
git push iReader audioRemote:R1001_audio
git push origin
将当前分支推送到origin主机的对应分支
合并分支
merge是合并全部提交
cherry-pick选择合并
merge是合并全部提交
cherry-pick选择合并
merge 合并dev分支
git checkout master 切换至master分支
git merge --no-ff dev
如果出现合并冲突就 找相应文件改冲突
改完执行 git add . 和 git commit -a -m "msg"
如果出现vi 编辑界面 则输入 备注 后按Esc : wq 保存退出
git cherry-pick <commit id>
如果将Dev中的一个commitId合并到master
dev分支下git log查看CommitId并复制要合并的CommitId (一个提交点对应一个哈希值)
git checkout master
git cherry-pick <Dev-commitId>
git cherry-pick <start-commit-id>..<end-commit-id>或者git cherry-pick <start-commit-id>^..<end-commit-id>
前者表示把<start-commit-id>到<end-commit-id>之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;
后者表示把<start-commit-id>到<end-commit-id>之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。
附开发常用命令
忽略文件.gitignore
Android Studio下的.gitignore
log 查看提交信息
git log 查看提交信息
gl=git log --oneline --all --graph --decorate $*
所有仓的直线提交图
所有仓的直线提交图
常见错误
账户 邮箱 提交的时候错误
scp -P 29418 -p 10.1.11.33:/hooks/commit-msg .git/hooks
scp -P 29418 -p 10.3.11.45:/hooks/commit-msg .git/hooks
ZS_1.0的钩子
自动生成ChangedId为了提交到gerrit
自动生成ChangedId为了提交到gerrit
scp -P 29418 -p 172.16.7.25:/hooks/commit-msg .git/hooks
commit-msg 钩子接收一个参数,此参数即上文提到的,存有当前提交信息的临时文件的路径。 如果该钩子脚本以非零值退出,Git 将放弃提交,因此,可以用来在提交通过前验证项目状态或提交信息。 在本章的最后一节,我们将展示如何使用该钩子来核对提交信息是否遵循指定的模板。
git reset 后代码丢失 代码未commit
reset
如果文件不小心被删除了
但之前文件被跟踪和提交了
但之前文件被跟踪和提交了
1、需要记住所需恢复文件的名字和版本号(commit id)
Git checkout commit_id -- file_name
Git checkout commit_id -- file_name
要查看删除的文件: git ls-files --deleted
中级
git remote
一个Git项目绑定多个远程服务器
git remote add origin [ur] 增加一个远程路径简写为origin
git remote add githup [githup:...] 把GitHub项目路径设置为githup
push到不同服务器 push origin dev
查看远程服务器
git remote -v
git remote show origin
替换远程服务器url
git remote set-url origin [url]
重命名
git remote rename oldName newName
查看文件谁修改过
git blame (fileName)
配置
Git密钥公钥
生成密钥
ssh-keygen -t rsa -C "liuwenrong@tianpingpai.com"
ssh -i ~/.ssh/id_rsa
查看 key
cat ~/.ssh/id_rsa.pub
测试密钥
ssh -T git@github.com
ssh -v git@github.com
Git config
配置 查看
git config --list
cat .git/config
用户目录 .gitconfig
配置
配置核心编辑器
git config --global core.editor vim
忽略文件权限
git config core.filemode false
git config --global core.filemode false
配置用户
单个项目
git config user.name "liuwenrong"
git config user.email "liuwenrong@tianpingpai.com"
全局用户
git config --global user.name "liuwenrong"
git config --global user.email "liuwenrong@tianpingpai.com"
记住密码
git config --global credential.helper store
配置远程服务器地址
git remote add simpleName url
git remote add origin githup.xxx.git
配色
git config --global color.status auto
git config --global color.diff auto
git config --global color.branch auto
git config --global color.interactive auto
基础操作
常用命令
git status 查看状态,如果对git不熟悉,建议经常敲这命令
git add . 添加到仓库(针对新增加的文件)
当add . 出错时,试试
git add --all
git commit -s -a -m "注释必填" 提交到本地仓库
-s自动加上Signed-off-by, -a 全部提交,-m 注释Msg
git push [分支名 不填默认当前分支] 提交到远程服务器
git push origin dev
git rebase
git log
查看当前分支的提交点信息
git log origin/dev
查看本地.git仓库的dev分支log
不过要看最新的服务器提交点 需要git fetch
git log origin dev
无效 还是查看本地分支
git log FETCH_HEAD
查看远程分支的提交点log
其他筛选条件
--author=
根据用户
--branchName [branchName]
根据分支
比如:在当前分支中有一个名为v1的文件,同时还存在一个名为v1的分支
git log v1 -- 此时的v1代表的是分支名字(--后边是空的)
git log -- v1 此时的v1代表的是名为v1的文件
git log v1 -- v1 代表v1分支下的v1文件
git log v1 -- 此时的v1代表的是分支名字(--后边是空的)
git log -- v1 此时的v1代表的是名为v1的文件
git log v1 -- v1 代表v1分支下的v1文件
git log --author=liuwenrong R6002_608 --
R6002_608分支下liuwenrong的所有提交
git show
查看本次提交的修改
Tag
1, git tag -a seller_1.6.0 -m "卖家1.6.0"
2, git push origin --tags
git tag --list
git fetch --tags
提交代码流程
git add .
git commit -s -a -m '注释'
git commit -s -a
会进入编辑器
当出现 .git/index.lock时
多处编辑文件,git锁住了
可以 rm .git/index.lock 删除该文件后,继续执行commit命令
git fetch origin dev 从服务器下载到本地仓库(空格)
git rebase origin/dev 本地仓库和本地代码合并(斜杠)
git fetch <远程主机名> <分支名>
git fetch <远程主机名>
将某个远程主机的更新,全部取回本地。
git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。
git rebase refs/remotes/origin/dev
git rebase 简写
如果 发生冲突 (修改冲突后) git add .
git rebase --continue
push 到服务器
git push origin dev 提交到服务器
如果是第一次push
git push -u origin master
第一次push到某个新的分支
git push set-upstream [服务器简写origin] [分支名]
修改提交信息
修改commit Msg信息
git commit -s --amend [-v] 接着修改当前这个 commit 的 messagen -v是编辑器(可不写)
git commit --amend --author="liuwenrong <liuwenrong@coolpad.com>"
注:双引号
git commit --amend --author="liuwenrong <wenrong.liu@transsion.com>"
TFS_555725:liuwenrong_sys_task: add network
Signed-off-by: liuwenrong <liuwenrong@coolpad.com>
修改倒数第二个提交点Msg和内容
git reset --soft commitId 或者 git reset --soft HEAD^ 回退提交,但代码还在
git add . 将倒数第一个的提交内容也加进来
git commit --amend
git push origin HEAD --force
删除暂存区里的文件
git rm --cache 文件名
是 git add 文件名的逆向操作
使用场景
1. 把已经add追踪的文件加到.gitignore中
git rm -r --cache packages/SystemUI/.idea/
删除暂存区和工作区的文件
git rm -f <file>
如果文件没有加到暂存区
先执行 git add <file>
如果只有一个文件或者全部需要删除
git add .
git rm -f -r 文件夹
检出 git checkout
切换分支
git checkout dev
git checkout master
git checkout ()提交点哈希值) 切换到该提交点的代码
检出文件/从本地仓库恢复某文件
git checkout -- xx.java
如果该文件已经 add 到暂存队列中,上面的命令就不灵光喽
需要先让这个文件取消暂存:
git reset HEAD --+ 需要取消暂存的文件名
新建并切换分支 git checkout -b xx
git checkout -b dev 新建并切换到dev分支
git checkout -b dev origin/dev 新建本地分支dev并关联到.git仓库的dev分支
git checkout -b dev origin/JV_8953_Dev
Branch dev set up to track remote branch JV_8953_Dev from origin.
Switched to a new branch "dev"
git checkout dev(远程有这个同名的分支就会关联) 注:没有 -b
branch 分支
查看分支
git branch -a 全部分支
git branch -r 查看远程分支
git branch 查看本地分支
git branch -v 查看分支最后修改
git branch -vv
查看本地分支-关联服务器分支 以及最后的提交
分支操作
git branch xx 创建xx分支
git branch -d xx 删除xx分支(需在其他分支下操作) 未合并不能删除成功
git branch -D xx 强制删除xx分支(需在其他分支下操作)
git branch <new-branch-name> 2f865e5
在某个提交点处新建一个分支
git branch --set-upstream-to=origin/JV_LauncherBS_Dev
git rebase 设置默认的服务器分支
git branch --set-upstream dev_lwr coolyota/coolyota
关联服务器
git branch --track dev coolyota/coolyota_dev
没用
分支重命名
git branch -m oldbranchname newbranchname
Android
Ignore
项目 git clone
Coolpad coolyota Y3
常见问题
int流有格式问题,abort了本次提交
git reset --soft
git commit -s -a
子主题
子主题
repo后处于没有分支状态
git checkout JV_8953_Dev
切换到Dev并关联服务器Dev分支
git checkout -b dev yulong/JV_8953_Dev
当关联了几个服务器如 origin yulong zeusis
服务器代码覆盖本地提交
git fetch --all
git reset --hard yulong/JV_8953_Dev
不做任何合并,Rebase
HEAD指向刚刚下载的最新的版本
Int分支覆盖Dev分支
git branch 查看本地分支名 如:dev,int
或者JV_8953_Dev,JV_8953_Int
或者JV_8953_Dev,JV_8953_Int
git checkout dev(或者JV_8953_Dev)
git reset --hard int(或者JV_8953_Int) //先将本地的dev分支重置成int分支
git push yulong JV_8953_Dev --force //再推送到远程Dev仓库
git reset --hard int(或者JV_8953_Int) //先将本地的dev分支重置成int分支
git push yulong JV_8953_Dev --force //再推送到远程Dev仓库
子主题
cherry-pick 有冲突
dev分支执行了git pull 或者fetch+merge命令导致
merger会导致该commitId的parentId不是int分支
的最新提交点
merger会导致该commitId的parentId不是int分支
的最新提交点
解决:
dev 回退代码后 用rebase合并
dev 回退代码后 用rebase合并
git reset --hard (commitId合并之前的提交点)
git fetch
git rebase (commitId int分支最新的点对应的dev中提交点)
如果有冲突,解决后 git add.
git rebase --continue
git checkout int
git cherry-pick (commitID 刚才dev分支rebase后的提交点)
子主题
合并提交点
JV_8953_Dev分支上
一个功能点新建本地分支git checkout -b [local_function]
如: git checkout -b power
当前处于功能分支上如:power分支
改完代码,生成了多个提交点,合并成一个提交点
改完代码,生成了多个提交点,合并成一个提交点
git log
commit 333
commit 222
commit 111
commit 222
commit 111
git reset --soft 111
重置了222和333的提交,但本地代码还在
git status
查看状态/可以不执行
git commit -s --amend
修改111提交点的msg
TFS_565687:liuwenrong_sys_add:Modify A Screen theme and wallpaper
sys
app_BLauncher
add
fix
opt
不管注释是否修改,commitId都会变
git status
查看状态/可以不执行
git branch -a
查看所有分支
git checkout JV_8953_Dev
后处于Dev分支上:
后处于Dev分支上:
然后将功能分支合并过来
git rebase [local_fuction]
git rebase [commit-id]
也可以是合并某一个提交点
git pull --rebase
拉取服务器代码跟本地代码合并
有冲突,解决即可
同一个提交commitId会变
git push yulong HEAD:JV_8953_Dev
当同时有yulong和zeusis的远程服务器,必须指定
要走读
git push coolyota HEAD:refs/for/coolyota_msm8953_dev
Dev上验证通过后
Dev分支上
git log
查看提交点ID,以便接下来cherry-pick
git branch -a
查看所有分支/如果自己记住了名可以不查看
git checkout JV_8953_Int
Release分支
走读
git push coolyota HEAD:refs/for/CP_LauncherB_Release
Int分支上
git cherry-pick [commit-1] [commit-2]
将要提交的点合并到Int流
git push HEAD:JV_8953_Int
git push
可以简写,表示当前分支
走读
git push yulong HEAD:refs/for/JV_8953_Int
git push --no-thin yulong HEAD:refs/for/JV_8953_Int
git push coolyota HEAD:refs/for/coolyota_msm8953_int
子主题
回退到最近一次的提交
git reset --hard HEAD
git pull
0 条评论
下一页