Git 常见命令及其命令组合
Git 基础命令
初始化仓库
git init
案例: 假设你开始一个新项目,首先在项目目录下打开终端,运行git init
来初始化一个新的 Git 仓库。
查看状态
git status
案例: 运行git status
可以查看当前目录下哪些文件被修改了,哪些文件已经添加到暂存区,哪些文件还没有跟踪。
添加文件
git add <file>
案例: 你修改了README.md
文件,然后运行git add README.md
将更改添加到暂存区。git add .
案例: 如果你修改了多个文件,可以使用git add .
将所有修改过的文件添加到暂存区。
提交更改
git commit -m "commit message"
案例: 暂存区准备好后,运行git commit -m "Initial commit"
来提交更改,其中 "Initial commit" 是提交信息。
查看提交历史
git log
案例: 运行git log
查看所有的提交记录,包括提交的作者、时间、以及提交的哈希值。
git log --oneline
案例: 如果你想要一个更简洁的视图,可以使用git log --oneline
来显示每次提交的简短信息。
git reset HEAD <file>
案例: 如果你想要撤销README.md
文件的暂存更改,可以使用git reset HEAD README.md
。git checkout -- <file>
案例: 如果你想要撤销README.md
文件在工作目录中的更改,可以使用git checkout -- README.md
来丢弃这些更改。
推送与拉取案例演示
推送更改
git push
案例: 你完成了本地的一系列更改,并且已经提交。现在你想将这些更改推送到远程仓库,可以运行git push
命令。git push <remote> <branch>
案例: 假设你正在处理master分支 ,并且想要推送这个分支的更改到远程仓库,你可以运行git push origin master
。
拉取更改
git pull
案例: 当你想要更新你的本地仓库以包含远程仓库的最新更改时,可以运行git pull
来拉取并自动合并到当前分支。
git pull <remote> <branch>
案例: 如果你想要拉取远程仓库中origin
的develop
分支的更改,可以运行git pull origin develop
。
强制推送
git push --force
案例: 如果你已经决定重写历史并且远程仓库的某些提交需要被覆盖,你可以使用git push --force
来强制推送你的更改。git push --force-with-lease
案例: 这是一个更安全的强制推送选项。假设你正在推送到一个多人协作的仓库,使用git push --force-with-lease
可以避免在远程分支有新提交时覆盖它们。
拉取合并
git pull --rebase
案例: 当你想要拉取远程更改并且保持一个干净、线性的提交历史时,可以使用git pull --rebase
。例如,当你在feature-x
分支工作并想要集成最新的master
分支更改时,可以运行git pull --rebase origin master
。
强制推送注意事项
- 使用
git push --force
或git push --force-with-lease
时要非常小心,因为这可能会影响其他协作者的更改。
拉取合并与变基
- 使用
git pull --rebase
可以避免在历史中产生不必要的合并提交,使得项目的历史更加清晰。
拉取合并
git pull --rebase
: 使用变基的方式拉取远程更改,避免产生合并提交。
分支管理案例
创建分支
git branch <branch-name>
案例: 假设你正在master
分支上工作,想要开始一个新的功能开发。你可以运行git branch feature-login
来创建一个名为feature-login
的新分支。git checkout -b <branch-name>
案例: 如果你希望创建新分支并立即切换到该分支,可以使用git checkout -b feature-login
。这将创建feature-login
分支并自动切换到该分支。
切换分支
git checkout <branch-name>
案例: 你已经在feature-login
分支上工作了一段时间,现在想要切换回master
分支。运行git checkout master
即可切换。
删除分支
git branch -d <branch-name>
案例: 假设你已经完成了feature-login
分支的开发并将其合并回master
,现在想要删除这个本地分支。可以使用git branch -d feature-login
。git push <remote> --delete <branch-name>
案例: 如果你还想从远程仓库中删除feature-login
分支,可以运行git push origin --delete feature-login
。
查看分支
git branch
案例: 运行git branch
可以查看本地所有分支,其中当前分支会以星号 (*) 标记。git branch -r
案例: 运行git branch -r
可以显示所有远程分支。git branch -a
案例: 运行git branch -a
可以显示所有本地和远程分支。
合并分支案例
合并分支
git merge <branch-name>
案例: 假设你完成了feature-login
分支的开发并希望将其合并到master
分支。首先切换到master
分支,然后运行git merge feature-login
。
合并冲突
- 案例: 如果在合并过程中出现冲突,Git 会停止合并并让你手动解决。例如:
- 运行
git status
查看哪些文件有冲突。 - 编辑冲突文件,解决冲突。
- 运行
git add <resolved-file>
将解决后的文件添加到暂存区。 - 运行
git commit
提交解决冲突后的更改。
- 运行
变基合并
git rebase <branch-name>
案例: 假设你想要将feature-login
分支的更改应用到最新的master
分支上,可以使用git rebase master
命令。git rebase --continue
案例: 如果在变基过程中遇到冲突,解决冲突后,运行git rebase --continue
继续变基操作。git rebase --abort
案例: 如果变基过程中出现问题,你决定放弃变基,可以使用git rebase --abort
恢复到变基前的状态。
合并策略
git merge --no-ff <branch-name>
案例: 如果你想要保留分支历史,即使master
分支已经是最新的,也可以使用git merge --no-ff feature-login
进行非快进合并。
标签管理案例
创建标签
git tag <tag-name>
案例: 假设你完成了一个重要的发布版本,可以运行git tag v1.0
来创建一个轻量标签。git tag -a <tag-name> -m "tag message"
案例: 如果你想要创建一个带注释的标签,可以使用git tag -a v1.0 -m "Release version 1.0"
。
推送标签
git push <remote> <tag-name>
案例: 运行git push origin v1.0
将标签推送到远程仓库。git push <remote> --tags
案例: 运行git push origin --tags
可以推送所有本地标签到远程仓库。
删除标签
git tag -d <tag-name>
案例: 如果你想要删除本地标签,可以使用git tag -d v1.0
。git push <remote> :refs/tags/<tag-name>
案例: 运行git push origin :refs/tags/v1.0
可以删除远程仓库中的标签。
远程仓库操作案例
克隆仓库
git clone <repository-url>
案例: 运行git clone https://github.com/user/repo.git
将远程仓库克隆到本地。
远程仓库列表
git remote -v
案例: 运行git remote -v
可以查看远程仓库的详细信息,包括仓库的 URL。
添加远程仓库
git remote add <remote-name> <url>
案例: 如果你想要添加一个新的远程仓库,可以使用git remote add upstream https://github.com/otheruser/repo.git
。
远程仓库别名
git remote rename <old-name> <new-name>
案例: 如果你想要修改远程仓库的别名,可以使用git remote rename origin new-origin
。
远程仓库URL
git remote set-url <remote-name> <new-url>
案例: 如果远程仓库的 URL 发生变化,可以使用git remote set-url origin https://github.com/user/new-repo.git
更新 URL。