Git
Git
- 配置用户签名(首次需要设置,否则提交时报错)
- 初始化本地库
命令
初始化本地库(会在当前目录生成
.git的文件夹)git init连接远程仓库
git remote add origin xxxxx//x为remoteRepo的SSH或者https git clone xxxxx//克隆会直接连接 git remote -v//查看远程仓库地址查看状态
git status将文件加入追踪/删除追踪
git add filename //单个文件 git add . //所有文件 git rm --cached filename //去除对文件的追踪提交本地库
git commit -m "desription of this version." //""中是对这次提交的版本的描述 //git会输出 [main xxxxxxx] //xx为版本号前七位查看版本信息
git reflog //版本号为前七位 git log //详细信息版本设置(会修改本地文件)
git reset --soft xxxxxxx //回退版本,但保留文件修改到untracked git reset --mixed xxxxxxx //回退版本,但保留文件修改到tracked git reset --hard xxxxxxx //--hard 强制回退到xxxxxx版本,并丢失数据,慎重!!!
远程
所有带push的才会修改远程,否则只是修改本地。例如git remote remove [ref]仅仅删除本地引用。
推送到远程
git push推送到远程并设置默认推送
git push origin main # 将本地的main分支推送的远程的main分支 git push -u origin main # 将本地的main分支推送的远程的main分支并设置默认推送。 # 设置默认推送后,可以直接使用 git push git push origin <local_branch>:<remote_branch> # 将本地指定分支推送到远程指定分支推送到远程(本地当前分支和远程要分支不一致的情况)
git push origin [local_branch]:[remote_branch]删除远程分支
git push -d [remote_branch] #方式1 git push origin :remote_branch #将空推送到远程分支,即删除。拉取远端分支到本地
git fetch [origin] [remote_branch]根据远端分支创建本地分支(得先fetch)
git checkout -b [local_branch] [origin]/[remote_branch]
分支
可以并行开发多个功能,提高开发效率。
开发失败不会互相影响
查看分支
git branch -v创建分支
git branch [name] # 仅创建分支。 git checkout -b [branch_name] #创建并切换到新分支切换分支
git checkout [name]合并分支
git merge [name] //将name分支合并到当前分支删除分支
git branch -D localBranchName修改当前所在分支名字
git branch -m <new_branch_name>
分支冲突
原因:被合并的分支与当前分支在同一文件的同一位置有不同修改)
解决步骤
手动操作文件,解决冲突。
git add conflictFile //将冲突文件加入追踪
git commit -m "version description" //最后不加文件名,直接默认commit到当前分支。被合并的分支中冲突文件保持原状态。
协作
团队协作
初始化项目库
将自己的分支交到代码托管平台如
githubgit push <remote name> <local branch>将远程库克隆\拉取到本地
git clone git pull
友情协作
- 协助者
fork项目到自己远程库。 - 协助者将远程库
clone到本地 - 协助者进行本地修改后,
commit本地分支,再push到自己远程库,提交pull request请求。经团队管理员审核后merge成功。
远程和本地交互
本地远程连接
git remote add origin xxxxx//x为remoteRepo的SSH或者https git clone xxxxx//克隆会直接连接 git remote -v//查看远程仓库地址给
remote repo创建别名 、查看别名git remote add alaisName xxxx //xxx为项目地址 git remote -v //查看别名将本地当前分支
push到remote repogit push origin/address remoteBranch //origin是当前git对应github的项目将远程分支
pull到当前分支git pull origin/address remoteBranch // origin是当前git对应github的项目
重要命令
git add <file>...
将工作目录中未追踪的文件加入跟踪,修改了的文件放入暂存区。
git restore <file>...
git restore在不指定--staged时,会将工作区的较于上一次提交的更改移除。会造成数据丢失。git restore --staged会将暂存区的更改放回到工作区。可以看作是git add的undo。
git reset
--soft将已经commit的数据回滚到staged状态,相当与已经运行了git add.--mixed默认, 将已经commit的数据回滚到unstaged状态,相当与修改了但未git add,可以看作是git add的undo。--hard会造成数据丢失,将已经commit的数据回滚到上一个commit的状态。--merge <commit_sha>取消merge,回到<commit_sha>的状态。
git reset -- <file>...要么作用与版本,要么作用与未提交的内容。不能作用于已经提交的某一个文件。
git rm
git rm <file>...将文件彻底删除。git rm --cached <file>...取消对文件的追踪。
git rebase
用于合并分支,但与merge有区别。将指定分支作为base即起点,将本分支的commits重新应用,看起来想是在一个分支上进行合作。
此外,如果制定-i还能修改这修commits的应用规则,例如多个commit压缩成一个,修改信息等等。
git revert
用于回退到某一个节点,但是通过新建一个commit来回滚,原来的记录仍然存在。这样就避免了修改线上已经存在的commit被删除而导致的困惑。
比较下来,reset一般用于本地,而revert一般用于线上。
同样的,这个也可能存在文件冲突。
git cherry-pick
将其他的commit拿一份过来,不修改拿的地方,应用在当前分支。
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。
git stash
将修改但未commit的(Changes not staged for commit)内容暂存起来到一个栈里头(每个分支独有),方便切换到别的分支。
git stash匿名存储,无法通过git stash list查看。git stash list查看栈内容。git stash save "description."正常存储。git stash pop将栈顶的内容弹出并应用。git stash apply将堆栈的内容应用,不弹出。git stash drop [stash@{?}]从堆栈中移除某个指定的stashgit stash clear清除栈中的所有内容git stash show查看堆栈中最新保存的stash和当前目录的差异。 通过git stash show -p查看详细的不同。git stash branch从最新的stash创建分支。
其他命令
git clean 从工作目录中删除所有没有tracked过的文件。
git stage 等于git add。
bfg --delete-files file_name:从git历史中删除文件