一、Git上传本地项目到GitHub
1、在本地文件下初始化git
git init
2、GitHub新建项目
3、远程关联
git remote add origin 自己仓库地址(第二步新建的地址)
4、推送项目到远程
git push -u origin master
若远程新建时有文件,可以通过以下命令直接覆盖
git push -u origin master -f
二、日常操作命令
说明 | 命令 |
---|---|
clone远程代码 | git clone <版本库的网址> |
查看本地分支 | git branch |
查看本地所有分支 | git branch -a |
新建本地分支(test) | git branch test |
撤回提交(代码不会保留) | git reset --hard <commit_id> |
撤回提交(代码还在) | git reset <commit_id> |
合并分支(把分支"branchname"合并到当前分支) | git merge branchname |
强制推送(慎用:强制push,本地覆盖远程) | git push -u origin kenuo_1.5.0_bug -f |
强制覆盖(慎用:强制pull,远程覆盖本地) | git fetch --all && git reset --hard origin/master && git pull |
查看自己git操作日志 | git reflog |
查看提交历史 | git log |
通过指定分支新建本地分支 | git checkout -b branchname1 origin/branchname1 |
回退未add代码 | git checkout – 文件名 |
回退已add代码(全部) | git reset HEAD |
回退已add代码(指定) | git reset HEAD xxx.java |
拉取远程分支到本地(不会新建本地分支) | git fetch origin test(远程分支名) |
删除本地分支(-d -D【强制】) | git branch -D test(本地分支名) |
本地分支未提交的log | git log origin/master(远程分支名)…master(本地分支名) |
从指定提交切分支 | git checkout -b 2023-12-19-coffee(新分支名) d229582cf3edf60f237b51c52c99930220cf83a9(commit) |
将A分支某一次commit复制到B分支(此命令在B分支执行) | git cherry-pick a651e0bce34aa414962ed067a1922c5d053f12fb(A分支的commitID) |
三、将A分支commit复制到B分支
某一次commit
- git checkout A 切到A分支
- git log 查询A分支的提交记录,找到要复制的commit ID (假设有commitA commitB commitC ,commitB提交时间是在A和C的中间 )
- git checkout B 切到B分支
- git cherry-pick commitB 执行cherry-pick操作就会将A分支的提交记录(只含commitB)复制到B分支
四、忽略已经追踪文件
git通常在.gitignore文件进行配置来忽略本地文件,但是若已经被git追踪,则会配置无效。
assume-unchanged 与 skip-worktree区别:
- assume-unchanged:这个会关闭文件与远程仓库的跟踪,认为这个文件远程仓库是不会修改,所以每次pull都是本地的文件。
- skip-worktree:这个不会关闭文件与远程仓库的跟踪,只是告诉Git不要跟踪对本地文件/文件夹的更改。如果远端仓库内容有变化,pull时会拉取最新的变化,并提示冲突,但因为没有跟踪本地更改,所以需要no-skip-worktree再合并最新的变化。
添加忽略
git update-index --skip-worktree path
git update-index --assume-unchanged path
取消忽略
git update-index --no-skip-worktree path
git update-index --no-assume-unchanged path
哪些文件存在标识
查看打了skip-worktree标识的文件
git ls-files -v | grep -i ^S
查看打了assume-unchanged标识的文件
git ls-files -v | grep ^h
清除所有文件的标识
git ls-files -v | grep ^h | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree