赞
踩
团队使用gitlab,但是使用的语法还是git。创建项目的时候显示了很多常见语句,整理如下:
# Git global setup git config --global user.name "XXX" git config --global user.email "XXX" # Create a new repository git clone XXXX/extract_frame.git cd extract_frame touch README.md git add README.md git commit -m "add README" git push -u origin master # Push an existing folder cd existing_folder git init git remote add origin XXX/extract_frame.git git add . git commit -m "Initial commit" git push -u origin master # Push an existing Git repository cd existing_repo git remote rename origin old-origin git remote add origin XXX/extract_frame.git git push -u origin --all git push -u origin --tags
参考:【git】git add 添加错文件 撤销
要上传的文件名进行不要出现中文,不然在使用status查看add的文件时,就会出现一些意料之外的字符。。。。
git add *
git add .
# 上面两个都可以起到添加当前文件夹下全部文件的效果
git status
# 查看add的文件
# 添加错文件想要撤销
git reset HEAD
# 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX/XXX/XXX.java
# 就是对某个文件进行撤销了
撤销后再查看状态,可以看到没有被添加要提交的内容
这样的提示。
定位到包含.git
文件夹的目录,使用git branch
就可以看到当前仓库存在的分支(通常我们只会git clone一个分支,所以此时返回的内容就是当前仓库的版本号信息。)
git branch
git branch -r/-a
To see local branches, run this command:
$ git branch
To see remote branches, run this command:
$ git branch -r
To see all local and remote branches, run this command:
$ git branch -a
参考:https://www.nobledesktop.com/learn/git/git-branches
另外,也可以直接在config文件中查看:
另外,也可以
git log
这里有一个commit+提交的版本号,其实和gitlab上显示的这个SHA序号是一致的,这里只显示了一部分,复制就可以看到全部序列是一串很长的字符。
使用-b
参数指定要访问的分支
git clone -b XXXbranch http://XXXX/XXX.git
最简单的一种lowB方式就是换个文件夹重新git clone
,以PaddlePaddleOCR
为例,默认就是最新的版本,但是切换分支后发现,这些分支对应的https链接都是一样的,
根据:使用git克隆指定分支的代码可知,下载指定分支release/2.1的命令如下:
git clone -b 分支名 仓库地址
# 其中分支名 就是github上看到的`release/2.1`
git clone -b release/2.1 https://github.com/PaddlePaddle/PaddleOCR.git
"""
会报错
fatal: unable to access 'https://github.com/PaddlePaddle/PaddleOCR.git/':
gnutls_handshake() failed: The TLS connection was non-properly terminated.
"""
# 下面这个是对的
git clone -b v2.1.1 https://github.com/PaddlePaddle/PaddleOCR.git
有些branch分支是没有代码的,无法使用,所以最好使用tags,参考GitHub下载克隆clone指定的分支tag代码
git clone --branch [tags标签] [git地址] 或者 git clone --b [tags标签] [git地址]
# 这里-b最好给tags标签
git clone -b 1.4.1 https://github.com/jumpserver/coco.git
简单来说,就是正常下载repo,然后用checkout切到对应的commit记录上去
git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
参考:
参考:git 更新本地代码
大致分为几种情况:
——本地代码未修改,只有master分支,直接更新
git pull
但前提必须是本地的代码没更改过。比如,你提交了代码到 github 后,随后别人也提交代码到 github,然后你需要更新别人提交的代码到你本地,
就可以直接使用该命令。假如你提交代码后再修改过你本地的代码,就会产生冲突,直接使用该命令会失败的。
——本地代码有修改,多分支。
//切换到master分支
git checkout master
//更新master分支
git pull
//切换到自己的分支isso
git checkout isso
//把master分支合并到自己分支
git merger master
——本地代码有修改,只有master分支,直接覆盖本地代码
//重置索引和工作目录
git reset --hard
//更新代码
git pull
——本地代码有修改,直接覆盖远程仓库代码
// 覆盖isso分支
git push --force origin isso
// 覆盖主分支
git push --force origin master
# 删除remote的分支
git push -d <remote_name> <branchname>
>git push -d origin CastleDream/support_BDD100K
To github.com:CastleDream/mmsegmentation.git
- [deleted] CastleDream/support_BDD100K
# 删除本地的分支,-d是delete,-D是delete force,都可以
git branch -d <branchname>
> git branch -D CastleDream/support_BDD100K
Deleted branch CastleDream/support_BDD100K (was 221ac91).
参考:
比如:不小心把.ipynb_checkpoint
文件上传到github中了,想要对远程仓库中的文件进行删除,可以
git rm --cached 'file name'
git commit -m'message'
git push -u origin branch
参考:
在windows操作系统上,一开始直接在文件管理器上进行删除,然后
git add *
git commit -m
git push
然后就报错,说本地和远程存在不一致文件
正确删除本地文件,再push到远程的做法是:
$ git rm -r '需要删除的文件夹'
# 执行这句后,文件管理器就已经看不见这个文件夹了
$ git commit -m "delete data"
$ git push -u origin master
一开始直接写错文件夹路径,然后直接把要删除的文件夹拖进git bash这个CLI中,就可以看到路径了
可以看到,其实还是完整路径,c/表示c盘。。。
PS:如果还是报错,那就先执行一下git pull,保证本地和远程一致之后,再进行上面的rm操作序列
参考:如何在Git提交空文件夹
.gitkeep是一个占位文件。
Git是不会把一个完全空的文件夹添加到版本控制里,为了让空文件夹被跟踪,常规做法是在空文件夹里添加.gitkeep。
注意:.gitkeep并不是Git的特性。Git没有对占位文件名有要求,你可以放一个README也行。
Git:.gitignore和.gitkeep文件的使用 https://majing.io/posts/10000001781172
其实分两部分操作
第一部分:本地操作,在需要上传到github的文件夹中,执行以下命令
# 把这个文件夹变成Git可管理的仓库
git init
# 登陆github账号 global也可以换成local 看自己情况
$ git config --global user.name 'catalinaLi' #公司账号名称
$ git config --global user.email 'catalinaLi@companyName.com' #公司账号邮箱
# 然后需要添加要上传的内容
git add *
# 提交的信息提示
git commit -m "first commit"
# 连接远程仓库
git remote add origin https://github.com/XXX/XXXX.git
# 上传内容
git push -u origin master
第二部分: github上操作,新建一个repo,不要勾选readme选项,这样下面会有使用的命令提示。
参考:
今天想push一个项目的时候,走神,把git后面的参数写成了 update,然后就自动更新了??哈哈
常见的方式有三种:
先把修改过的内容commit上去
git commit -m "My message"
不保留本地改动 直接覆盖
git reset --hard
# 或者
git checkout -t -f remote/branch
# 或者,单纯放弃某个文件的更改
git checkout filename
想要保留本地的更改
git stash # 将改动藏起来
git pull # 用新代码覆盖本地代码
git stash pop # 将刚藏起来的改动恢复
参考:
add *
并提交之后,才从提交的打印信息里看到有些内容被错误添加了,因此使用rm删除(删除当前commit里不想要push的内容),但是不确定剩余的commit
内容是否正确
git add *
git commit XXX
git rm XXX # 这里删除也只是删除了工作区
git commit --amend -CHEAD # 再次提交会覆盖上次提交的内容,然后push就可以了
如果想要查看某次提交的具体内容,可以:
git log #找到最新一次提交的 hash ID,一般只需要前6位字符即可
git show 79ac00 # 就可以看到具体信息了
只克隆下包含最近一次commit的一个分支,可以使用depth
来指定深度
git clone --depth 1 --branch english https://github.com/labuladong/fucking-algorithm.git
参考:
一般做法是:gitlab设为global,github设为local
可以直接打开对应repo的.git
,打开其中的config文件,直接添加用户名和邮箱,如果没有在用户根目录下设置全局账户,则这个config的设置就是对应的repo的局部用户名
因为公司使用gitlab,用处会多一些,所以可以将公司gitlab的账号设置为global的,例如:
$ git config --global user.name 'catalinaLi' #公司账号名称
$ git config --global user.email 'catalinaLi@companyName.com' #公司账号邮箱
global(用户级别):
位于~/.gitconfig,具体到你的用户。你可以通过传递–global 选项使Git 读或写这个特定的文件。
以我本机为例,Windows系统下,在C:\Users\username\.gitconfig
:
内容也非常简单,就是用户名和邮箱:
而如果是个人的github项目,可以设为local,例如:
$ git config --local user.name 'username' #github账号名称
$ git config --local user.email 'username@gmail.com' #github账号邮箱
这个需要先进入一个github的repo,init之后使用上述命令。
local(仓库级别):
位于 .git/config,无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。
以我本机的一个为例:
其中的内容就会多一些,有明确的repo的指向
参考:
英语可以搜索关键词git create branch from master
简单来说,就是
# 只创建 不切换 git branch <branch_name> # 创建并立即切换到新分支 git checkout -b <sub-branch> branch # -b 你要创建的新的子分支 # branch 创建的分支所基于的分支 # 例如 $ git checkout -b huangs master Switched to a new branch 'huangs' # 执行完上面的命令后,会默认帮你切换到自己新建立的那个分支 $ git checkout huangs # 也可以使用这个方式来切换到huangs分支上去 git push origin huangs # 将当前内容(上一句命令已经切换到huangs分支了)推送到 origin路径里的huangs分支里去 If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c <new-branch-name> Or undo this operation with: git switch -
注意,要在这个repo的目录里运行。。。
主要参考
报错:
error: src refspec huangs does not match any.
error: failed to push some refs to
建议:
git add * git commit -m "XXXX" # 可能会提示你输入用户名密码 git config --global user.email "XXX@XXX.com" git config --global user.name "XXX" # 输完用户名之后,再去提交 git commit -m "first update" [dev 68ae78b] first update 3 files changed, 792 insertions(+) create mode 100644 segVol/config/train_test_heart.cfg create mode 100644 segVol/config/train_test_hematoncus.cfg create mode 100644 segVol/runSegMain.py # 一开始我以为可以保存后直接提交到自己的分支,但是报错必须先把之前的提交或者换分支之前stash了 git checkout huangs error: Your local changes to the following files would be overwritten by checkout: XXX/.gitignore Please commit your changes or stash them before you switch branches. Aborting # 想要保留本地的更改,可以 git stash # 将改动藏起来 > Saved working directory and index state WIP on dev: XXX first update git pull # 用新代码覆盖本地代码 > Username for 'http://XXXX': XXXX Password for 'http://XXX@XXX': Already up to date. # pull把远程更新到本地,就可以切换分支了 git checkout huangs Branch 'XXX、' set up to track remote branch 'XXX' from 'origin'. Switched to a new branch 'XXX' # 切换分支之后就可以把刚刚的更新恢复 git stash pop # 将刚藏起来的改动恢复 > Auto-merging XXX/.gitignore CONFLICT (content): Merge conflict in XXX/.gitignore # 然后push到远程 git push origin huangs Username for 'http://XXXX': XXX Password for 'http://XXX': Everything up-to-date # 可以看到现在就在自己的分支了 git branch dev * huangs
但是还是有些问题,之前编辑的文件消失了。。但是其实问题很简单,
dev
分支上做的修改,上面的操作其实也只是在修改文件没有commit无法切换分支的解决方式dev
分支即可,即git checkout dev
根据Stack Oveflow:Relationship between n git branches
直接使用以下命令:
$ git log --graph --decorate --oneline --simplify-by-decoration --all
* f3f616b (origin/dev) Merge branch 'abc' into 'dev'
| * 9b07710 (origin/abc) add RandomAffine
|/
* 7b7f92c (origin/drf) update configuration
* 3d03b4f (HEAD -> master, origin/master, origin/123, origin/HEAD) merge from master
* 7873e87 init dev for XXX
如果想查看特定分支的,把--all
改成相应的分支即可,例如
$ git log --graph --decorate --oneline --simplify-by-decoration master
也可以参考git graph 图线,中文的,比较好懂。
我的情景是:我clone了某个repo,进行修改后,要把它传到另一个新建的repo上去。
"方式1,直接重新设置url"
git remote -v #查看原始的fetch和push路径
> origin http://XXXX/user/test.git (fetch)
origin http://XXXX/user/test.git (push)
git remote set-url origin https://github.com/xxx/xxx.git # 更换新的仓库地址
"方式2,重命名旧的url,然后指向新的"
cd existing_repo
git remote rename origin old-origin
git remote add origin http://10.70.21.10:8888/ai/miccai-challenge.git
参考:
这其实也是0.常见使用的靠后的命令
cd existing_folder
git init
git remote add origin http://10.70.21.10:8888/ai/miccai-challenge.git
git add .
git commit -m "Initial commit"
git mv <oldname> <newname>
# 例如
git mv testAD 1.testAD
# 注意新名字里不要有空格,必须加空格的话就 1.\ testAD 加个转义符
参考:
mv
就可以,不需要两步参考:
完整提示信息如下:
出现这一问题的原因是:
那么根据stackoverflow的回答:Updates were rejected because the remote contains work that you do not have locally
git push -f origin master
git push -f origin branch_name
如果不想整个项目都回退到某个commit,尤其是多人开发的时候。可能会有想回退单个文件,或者单个文件夹到指定版本的需求。
假设要回退到的commit的hash是c5f567
,则可以使用checkout
命令
git checkout c5f567 -- file1/to/restore file2/to/restore
# 加上~序号,表示回滚到c5f567的上几个commit(~1,就是回滚到c5f567的前一个commit)
git checkout c5f567~1 -- file1/to/restore file2/to/restore
也可以去看git的官方手册:git-checkout
参考:
报这个错就是网络有问题,要么就是代理有问题
macOS下git的config文件位置:$HOME/. gitconfig
参考:
windows下设置终端代理命令,根据文章 命令终端设置全局代理的两种方法,例如:
# v2rayN + https/socks
set http_proxy=http://127.0.0.1:10811
set https_proxy=http://127.0.0.1:10811
# 和自己的代理设置一样即可,这里使用socks5代理,这都是临时性设置,关闭终端后就消失了
> set http_proxy=socks5://127.0.0.1:10810
> set https_proxy=socks5://127.0.0.1:10810
可以使用set命令,查看当前终端的设置
> set
设置之后,速度飞快,NB啊,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。