Git常用操作
Git建立远程仓库
- 远端仓库初始化成裸仓库:
新建仓库:mkidr [dirname]
初始化:git init --bare
- 从已有项目初始化:
git init
git add .
git commit -m “init”
git remote add origin ssh://root@localhost:22/path/to/repository
注:如果设置远程地址出错,使用:git remote remove origin
推送:git push origin master
- 其他成员检出仓库
执行如下命令以创建一个本地仓库的克隆版本:git clone /path/to/repository .
如果是远端服务器上的仓库,你的命令会是这个样子:git clone username@host:/path/to/repository .
Git克隆指定分支
使用Git下载指定分支命令为:git clone -b [分支名] [仓库地址]
使用示例:
git clone -b v2.8.1 https://git.oschina.net/oschina/android-app.git
git clone -b feature/MailServer ssh://git@172.16.2.109:16888/technician/Wartune.Server.git
git clone -b feature/Modify username@host:/path/to/repository .
Git切换到指定远程分支
在本地新建同名的(“dev”)分支,并切换到该分支
git checkout -t origin/dev
该命令等同于:
git checkout -b dev origin/dev
git checkout -b Camp origin/feature/Camp
Git修改远程仓库
本地有clone出来的git厍,则需要修改一下origin的地址,以便能继续push和pull,方法是,在命令行项目所在目录下执行: git remote set-url origin [新地址]
Git查看远程仓库地址:
git remote -vv
Git 查看当前分支对应的远程追踪分支
git branch -vv
Git删除本地分支:
git branch -d [branchname]
Git删除远程分支:
git push origin :[branchname]
Git 理解 Rebase
区别于merge,rebase 将指定分支的历史记录更新为自己的历史记录,而不是产生一次合并的提交。然后将自己本地的多个commit 链接到目标分支的最后面。
git rebase [目标分支]
# 针对错误提交 fb2f677 及其后面所有提交执行【交互式变基】
# rebase当前分支分支,并自动将多个commit自动压缩为一个
git rebase -i --autosquash fb2f677^
# fixup 指令也可以修改某个历史commit,而不是增加新的commit。
# fixup 会自动在修改之后的对应的 commit记录前增加“fixup!” 信息,每调用一次增加一次信息。
git commit --fixup fb2f677
Git 配置pull默认rebase
# 添加[全局]配置
git config --global --add pull.rebase true
# 删除[全局]配置
git config --global --unset pull.rebase
Git 仅查看当前分支的日志
创建新分支之后,查看当前分支相对于主分支有哪些提交
git log master..
Git本地代码回滚:
- 未使用
git add
缓存代码时:
放弃本地未提交的修改git checkout .
git checkout --[filename]
- 已使用
git add
缓存了代码git reset HEAD .
git reset HEAD --[filename]
- 已使用
git commit
回滚到commit-id,commit-id之后提交的commit都去除
git reset --hard [commit-id]
回滚最近3次提交
git reset --hard HEAD~3
Git移除已提交文件,并取消文件追踪
git rm --cached [file]
先从追踪删除,然后添加到.gitignore中
Git提交时忽略指定文件的变化
https://www.zhihu.com/question/25234996/answer/44083326
https://blog.csdn.net/DaSunWarman/article/details/79384307
assume-unchanged
assume-unchanged
专为应对检查一批文件是否变化耗费颇多的情况而设计。当你翻了此牌,GIT 便假定索引中此部分相关文件于工作副本内不作更改。因此它将避免一大波 stat 请求。每当索引中文件条目变化时则此牌失效(即,此文件变化自上游)。assume-unchanged
假定开发人员不会更改文件。此标记旨在为无变化文件夹(如 SDK)改善性能。
# 忽略跟踪,切版本还是会检测到修改的文件
git update-index --assume-unchanged [file]
# 恢复跟踪
git update-index --no-assume-unchanged [file]
skip-worktree
skip-worktree
干得更多:哪怕 GIT 知晓文件已被更改(或【还没理解】),却仍会装作没有发生,而以索引中的版本代替之——直至索引遭弃。skip-worktree
用于命 GIT 不再染指特定文件——即便开发人员可能更改它——的情形。
# 跳过
git update-index --skip-worktree [file]
# 恢复
git update-index --no-skip-worktree [file]
如果被忽略的文件多了,需要找一下:git ls-files -v | grep '^h\ ' | awk '{print $2}'
恢复所有的:git ls-files -v | grep '^h' | awk '{print $2}' |xargs git update-index --no-assume-unchanged
Git修复无法识别新增文件
使用ionlevel.csv
添加文件,报错:
The following paths are ignored by one of your .gitignore files:
code/bin/config/table/Fashionlevel.csv
Use -f if you really want to add them.
fatal: no files added
说明该文件被配置为忽略了。
可以使用git check-ignore
命令检查是哪一行配置忽略了此文件。
# git check-ignore -v Fashionlevel.csv
.gitignore:115:bin Fashionlevel.csv
或者可以使用git add -f Fashionlevel.csv
,强制添加。
Git删除提交记录
git reset --hard [commit_hash]
git push origin HEAD --force
git彻底删除敏感内容
https://www.jianshu.com/p/21830b5cbd41
https://www.jianshu.com/p/58fef32a15bb
操作前记得先备份一下
git filter-branch
指令可以移除版本库中的信息,并重写commit记录, 可以强制(--force
)git对所有分支和tag的历史记录(--tag-name-filter cat -- -all
)执行命令,从历史记录中删除指定文件(git rm --cached --ignore-unmatch [path-to-file]
)的内容和空提交(--prune-empty
)
删除一个文件,将[path-to-file]
替换为指定文件相对路径(以空格分隔多个文件,可以用*匹配目录),在项目顶层目录打开git-bash执行:git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch [path-to-file]' --prune-empty --tag-name-filter cat -- --all
还可以直接整个文件夹,比如test
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch test' --prune-empty --tag-name-filter cat -- --all
[可选步骤]执行完成后,归档历史已经清理完成,但还有一些垃圾文件,用下面的命令清理:
rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --prune=now git gc --aggressive --prune=now
提交(--all 作用于所有分支):
git push origin --force --all
如果tag中也需要删除敏感数据,则执行
git push origin --force --tags
若是团队项目,要通知同事rebase仓库,不要merge。merge会将文件重新还原
git 远程分支已经被删除,本地还有远程分支的记录
使用git branch -a
命令可以查看所有本地分支和远程分支(git branch -r
可以只查看远程分支)
发现很多远程仓库已经删除的分支在本地依然可以看到。
使用git remote show origin
可以查看哪些远程分支已经被删除,根据提示使用git remote prune origin
就可以将本地的相应分支记录删除。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com
文章标题: Git常用操作
文章字数: 1,665
本文作者: Jun
发布时间: 2018-05-11, 18:24:00
最后更新: 2022-07-05, 10:19:03
原始链接: http://yoursite.com/2018/05/11/git常用操作/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。