Git

Git

  1. 配置用户签名(首次需要设置,否则提交时报错)
  2. 初始化本地库

命令

  1. 初始化本地库(会在当前目录生成.git的文件夹)

    git init
  2. 连接远程仓库

    git remote add origin xxxxx//x为remoteRepo的SSH或者https
    git clone xxxxx//克隆会直接连接
    git remote -v//查看远程仓库地址
  3. 查看状态

    git status
  4. 将文件加入追踪/删除追踪

    git add filename //单个文件
    git add . //所有文件
    git rm --cached filename //去除对文件的追踪
  5. 提交本地库

    git commit -m "desription of this version." //""中是对这次提交的版本的描述
    //git会输出 [main xxxxxxx] //xx为版本号前七位
  6. 查看版本信息

    git reflog //版本号为前七位 
    git log  //详细信息
  7. 版本设置(会修改本地文件)

    git reset --soft xxxxxxx //回退版本,但保留文件修改到untracked
    git reset --mixed xxxxxxx //回退版本,但保留文件修改到tracked
    git reset --hard xxxxxxx //--hard 强制回退到xxxxxx版本,并丢失数据,慎重!!!

远程

所有带push的才会修改远程,否则只是修改本地。例如git remote remove [ref]仅仅删除本地引用。

  1. 推送到远程

    git push
  2. 推送到远程并设置默认推送

    git push origin main # 将本地的main分支推送的远程的main分支
    
    git push -u origin main # 将本地的main分支推送的远程的main分支并设置默认推送。
        # 设置默认推送后,可以直接使用
        git push
        
    git push origin <local_branch>:<remote_branch> # 将本地指定分支推送到远程指定分支
  3. 推送到远程(本地当前分支和远程要分支不一致的情况)

    git push origin [local_branch]:[remote_branch]
  4. 删除远程分支

    git push -d [remote_branch] #方式1
    git push origin :remote_branch #将空推送到远程分支,即删除。
  5. 拉取远端分支到本地

    git fetch [origin] [remote_branch]
  6. 根据远端分支创建本地分支(得先fetch)

    git checkout -b [local_branch] [origin]/[remote_branch]

分支

可以并行开发多个功能,提高开发效率。

开发失败不会互相影响

  1. 查看分支

    git branch -v
  2. 创建分支

    git branch [name] # 仅创建分支。
    git checkout -b [branch_name] #创建并切换到新分支
  3. 切换分支

    git checkout [name]
  4. 合并分支

    git merge [name] //将name分支合并到当前分支
  5. 删除分支

    git branch -D localBranchName
  6. 修改当前所在分支名字

    git branch -m <new_branch_name>

分支冲突

原因:被合并的分支与当前分支在同一文件的同一位置有不同修改)

解决步骤

手动操作文件,解决冲突。
git add conflictFile //将冲突文件加入追踪
git commit -m "version description" //最后不加文件名,直接默认commit到当前分支。

被合并的分支中冲突文件保持原状态。

协作

团队协作

  1. 初始化项目库

  2. 将自己的分支交到代码托管平台如github

    git push <remote name> <local branch>
  3. 将远程库克隆\拉取到本地

    git clone
    git pull

友情协作

  1. 协助者fork项目到自己远程库。
  2. 协助者将远程库clone到本地
  3. 协助者进行本地修改后,commit本地分支,再push到自己远程库,提交pull request请求。经团队管理员审核后merge成功。

远程和本地交互

  1. 本地远程连接

    git remote add origin xxxxx//x为remoteRepo的SSH或者https
    git clone xxxxx//克隆会直接连接
    git remote -v//查看远程仓库地址
  2. remote repo创建别名 、查看别名

    git remote add alaisName xxxx //xxx为项目地址
    git remote -v //查看别名
  3. 将本地当前分支pushremote repo

    git push origin/address remoteBranch //origin是当前git对应github的项目
  4. 将远程分支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@{?}]从堆栈中移除某个指定的stash

  • git 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历史中删除文件


Git
https://messenger1th.github.io/2024/07/24/Tools/Git/
作者
Epoch
发布于
2024年7月24日
许可协议