git 命令:
- 列出所有分支
git branch
git branch -vgit branch -vvgit branch --merged (列出已经合并到当前分支的分支,可删除)
git branch --no-merged - 创建分支
git branch iss53
- 删除分支
git branch -d testing
- 切换到分支(本地工作目录会变)
git checkout iss53
- 创建并且切换到分支
git checkout -b iss53
- 合并分支,把分支合并到当前分支
git merge hotfix
- 有冲突的合并
修改冲突文件,git add
git status 查看直到没有冲突git commit
- add & commit, 只add修改的文件
git commit -am"bala"
- 与上次commit合并,会覆盖上次commit,新的commit id
git commit --amend -m"update ff.txt"
- 暂存
git stash
git stash save "some message"
git stash list
- 恢复
git stash pop
在出现一个搁置栈的情况下,比如如果你想找回栈中的第2个,可以用 git stash apply stash@{1}
如果想找回第1个,可以用 git stash pop
如果想删除一个stash,git stash drop <id>
删除所有stash,git stash clear
---
- 列出远程分支
git ls-remote
git remote show (remote) - 指定远程分支的名字
git remote add name ...
git clone -o name - 删除远程分支
git push origin --delete devgit push origin :dev
- 修改远程分支地址
git remote set-url gitlab git@gitlab.gcloud.srcb.com:mhc/gpu-infra.git
---
- 在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
git fetch origin master:tmp
- 比较本地代码与刚刚从远程下载下来的代码的区别
git diff tmp
- git pull 与fetch的区别
git pull是git fetch和git merge两个步骤的结合
- push & pull
git pull <远程主机名> <远程分支名>:<本地分支名> (如果与当前分支合并,不写冒号后边的)
git pull origin next 等价于
git fetch origin && git merge origin/next
- 建立追踪(会覆盖之前的追踪)
git branch --set-upstream-to gitlab/master tmp (不写本地分支则时当前分支)
git branch --track tmp2 gitlab/master 会新建本地分支
- 将另一个分支的commit应用过来(commit-id 要在另有一个分支git log查看)
git cherry-pick commit-id..commit-id (左开右闭,不包括左边的commit-id)
git cherry-pick commit-id^..commit-id (包括左边)
- 合并commit
git rebase -i HEAD~数字
- 选择
pick
操作,git会应用这个补丁,以同样的提交信息(commit message)保存提交 - 选择
reword
操作,git会应用这个补丁,但需要重新编辑提交信息 - 选择
edit
操作,git会应用这个补丁,但会因为amending而终止 - 选择
squash
操作,git会应用这个补丁,但会与之前的提交合并 - 选择
fixup
操作,git会应用这个补丁,但会丢掉提交日志 - 选择
exec
操作,git会在shell中运行这个命令
--------------------------------------------------------------------------------
git配置
- git使用其他的ssh端口
# cat ~/.ssh/config
host gitlab.gcloud.srcb.com
hostname gitlab.gcloud.srcb.com
port 19630
- 代理配置
git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global --unset http.proxy
git config --global --unset https.proxy
npm config delete proxy
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
- 设置全局和局部用户
git config --global user.name mhcvs2
git config --global user.email merzhong0501@163.com
git config --local user.email "merzhong0501@163.com"
git config --local user.name "mhcvs2"
- git push 免密码
cd ~ && vim .git-credentials
输入: https://{username}:{password}@github.com
git config --global credential.helper store
问题
- push失败
error: 无法推送一些引用到 'https://github.com/cloud-pi/dbcm-roles.git'
提示:更新被拒绝,因为推送的一个分支的最新提交落后于其对应的远程分支。
提示:检出该分支并与远程变更合并(如 'git pull'),然后再推送。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。
先备份一个分支 git checkout -b master_bak
删除git branch -D master
重新拉取git fetch origin master:master
git checkout master
git merge master_bak
git push origin master
- 运行 git push 会push所有本地分支到追踪的远程,如果存在没有追踪的本地分支,git push命令会失败
git push origin 同样会失败
git push dev 会push所有带追踪的分支,忽略不带追踪的分支,但是却push到与本地同名的远程分支(不明白)
# git push origin dev
Warning: Permanently added '[gitlab.gcloud.srcb.com]:29675,[109.105.1.253]:29675' (ECDSA) to the list of known hosts.
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 258 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote:
remote: To create a merge request for dev, visit:
remote: http://gitlab.gcloud.srcb.com/hongchao.ma/test/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
To git@gitlab.gcloud.srcb.com:hongchao.ma/test.git
* [new branch] dev -> dev
[root@mhc test]# git branch -vv
* dev 6e42088 [origin/master:领先 1] add
master 4fa4514 add
git push origin dev:master 正确将本地dev分支push到远程master分支
- git远程分支回滚操作步骤:
1、git checkout the_branch
2、git pull
3、git branch the_branch_backup //备份一下这个分支当前的情况
4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id
5、git push origin :the_branch //删除远程 the_branch,不能是default分支
6、git push origin the_branch //用回滚后的本地分支重新建立远程分支
7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支
Git撤销&回滚操作
https://blog.csdn.net/ligang2585116/article/details/71094887
git如何撤销上一次commit操作
1.第一种情况:还没有push,只是在本地commit
git reset --soft|--mixed|--hard <commit_id>
git push develop develop --force (本地分支和远程分支都是 develop)
这里的<commit_id>就是每次commit的SHA-1,可以在log里查看到
--mixed 会保留源码,只是将git commit和index 信息回退到了某个版本.
--soft 保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
--hard 源码也会回退到某个版本,commit和index 都会回退到某个版本.(注意,这种方式是改变本地代码仓库源码)
防止冲突的方法:
git branch tmp origin/master
git checkout tmp
git pull
git diff master
git merge master
解决冲突
git checkout master
git merge tmp
git branch -D tmp
========================
git 设置自动保存账号密码
git config --global credential.helper store