remarks:
This article refers to teacher Liao Xuefeng’s blogGit tutorial。 Learn and record according to his blog. Thank him for his selfless sharing. You are also welcome to check the original text.
Knowledge points
- Force the deletion of unconsolidated branches,
git branch -D <branch-name>
, the modification of the branch will be lost git remote
andgit remote -v
Display remote warehouse informationgit push origin branch-name
Push local branch to remote.- After the default clone remote library, you can only see the master branch, and other branches need to set tracking,
git checkout -b dev origin/dev
Dev branch set to track fromorigin
Remote branch ofdev
。 git branch --set-upstream-to=origin/<branch> branch
Create a trace of local and remote branches forgit push
andgit pull
git pull <remote> <branch>
Pull the specified remote branch
Feature branch
In software development, there are always endless new functions to be added.
When adding a new function, you certainly don’t want to mess up the main branch because of some experimental code. Therefore, it’s best to create a new function every time you add a new functionfeature
Branch, develop above, merge after completion, and finally delete thefeature
Branch.
For example, you have received a new task: the development code isVulcan
The new feature is planned for the next generation of starships.
So we are ready to develop:
$ git checkout -b feature-vulcan
Switched to a new branch 'feature-vulcan'
After 5 minutes, the development is completed:
$ git add vulcan.py
$ git status
# On branch feature-vulcan
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: vulcan.py
#
$ git commit -m "add feature vulcan"
[feature-vulcan 756d4af] add feature vulcan
1 file changed, 2 insertions(+)
create mode 100644 vulcan.py
Cut backdev
, preparing to merge:
$ git checkout dev
If everything goes well,feature
Branching andbug
Branches are similar, merge, and then delete.
However, this function needs to be cancelled for some reasons
That is, this branch needs to be destroyed locally:
$ git branch -d feature-vulcan
error: The branch 'feature-vulcan' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature-vulcan'.
Destroy failed. Git tip,feature-vulcan
The branches have not been merged yet. If they are deleted, the modifications will be lost. If they are to be forcibly deleted, you need to use the commandgit branch -D feature-vulcan
。
Now let’s forcibly delete:
$ git branch -D feature-vulcan
Deleted branch feature-vulcan (was 756d4af).
Multi person collaboration
- Clone from remote warehouse, GIT automatically
master
Branch and remotemaster
Corresponding to the branch, the default name of the remote warehouse isorigin
- View remote warehouse information,
git remote
$ git remote
origin
git remote -v
Show more details of remote warehouse
$ git remote -v
origin [email protected]:findmoon/newrepo.git (fetch)
origin [email protected]:findmoon/newrepo.git (push)
The above is for pulling and pushingorigin
Address, with two permissions of pull and push
Push branch
- Push branch is to push all local submissions on the branch to the remote library. When pushing, you need to specify a local branch. Git will push the branch to the corresponding remote branch:
$ git push origin master
The above will push the local master to the origin master. Other local branches will not be pushed
git push origin dev
, push other branches. If there are no remote branches, create them(dev
)Branch and push
Remote branch push recommendation
master
The branch is the primary branch, so it should be synchronized with the remote branch at all timesdev
The branch is a development branch. All team members need to work on it, so they also need to synchronize with the remotebug
The branch is only used to fix bugs locally, so there is no need to push it to the remote, unless the boss wants to see how many bugs you fix every weekfeature
Whether the branch is pushed to the remote depends on whether you develop it in cooperation with your small partners
Clone remote warehouse
In multi person collaboration, for example, simulate another small partner (another computer or another directory) to clone the warehouse remotely
clone
Warehouse
$ git clone https://github.com/findmoon/newrepo.git
Cloning to 'newrepo'
remote: Counting objects: 55, done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 55 (delta 20), reused 54 (delta 19), pack-reused 0
Expand objects: 100% (55 / 55), complete
Check connection Done.
Branch push and conflict handling
Associate local and remote branches
- By default, from a remote library
clone
, only remotemaster
Branch localmaster
branch
$ cd newrepo/
$ git branch
* master
- If you want to
dev
For development on branches, you need to create localdev
Branch and set to track remoteorigin
ofdev
branch
$ git checkout -b dev origin/dev
Branch dev is set to track remote branch dev from origin.
Switch to a new branch 'dev'
- The new branch has been synchronized with the remote warehouse.
Now another partner modifiesdev
Branch andpush
To remote
$ git push origin dev
Username for 'https://github.com': findmoon
Password for 'https://[email protected]':
Object count: 3, complete
Delta compression using up to 4 threads.
Compressed objects: 100% (3 / 3), complete
Write to object: 100% (3 / 3), 319 bytes | 0 bytes / s, complete
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/findmoon/newrepo.git
09a36ec..5a15ca7 dev -> dev
The new local warehouse is pushed to the remote warehouse for the first time. Input requiredgithub
User name and password for
Specify branch or set Branch tracking during push
Push in small partnerorigin/dev
After that, you also modified the same file and pushed it
$ git push origin dev
To [email protected]:findmoon/newrepo.git
! [rejected] dev -> dev (fetch first)
Error: unable to push some references to ' [email protected] :findmoon/newrepo. git'
Tip: the update was rejected because the remote warehouse contains a submission that does not exist locally. This is usually because of another reason
Tip: a warehouse has pushed the reference. You may need to integrate remote changes before pushing again
Prompt: (such as' git pull... ').
Note: see the 'note about fast forwards' section in' git push -- help 'for details.
Prompt: unable to push, update rejected, GIT prompt: the push needs to integrate the changes first
- When there are changes in the remote warehouse, you need to integrate the changes and use them again
git pull
usegit pull
Pull the latest remote submission
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0
Expand objects: 100% (3 / 3), complete
From GitHub com:findmoon/newrepo
09a36ec..5a15ca7 dev -> origin/dev
The current branch has no tracking information.
Please specify which branch you want to merge.
See git pull (1) for details.
git pull <remote> <branch>
If you want to create trace information for this branch, you can:
git branch --set-upstream-to=origin/<branch> dev
git pull
Failed because:git pull
Local branch and remote branch need to be specifiedorigin
Branch tracking, orgit pull
Specify the remote branch in the parameter
git branch --set-upstream-to=origin/<branch> branch
Create a trace of local and remote branches forgit push
andgit pull
git pull <remote> <branch>
Specifies the remote branch to pull
Set trace remote branch
$ git branch --set-upstream-to=origin/dev dev
Branch dev is set to track remote branch dev from origin.
File conflict when pulling branch
After the tracking is set up above, restartpull
Pull update
$ git branch --set-upstream-to=origin/dev dev
Branch dev is set to track remote branch dev from origin.
$ git pull
Auto merge readme txt
Conflict (content): merge conflicts with readme txt
Auto merge failed. Correct the conflict and submit the correction result.
Now you cangit pull
, but the merger conflicts.Conflict resolution is the same as in local branch management,
- Manual modification
git pull
Merge conflicts, then commit, and finallypush
View conflict files
$ cat readme.txt
dev modify again commit on master
110
<<<<<<< HEAD
I modify readme on dev branch
=======
modify dev branch file on another people
>>>>>>> 5a15ca7c06dd2204fee3f4571e86b2bf64f6a83b
Add, submit, and push again after deleting the conflict item.
$ git add .
$ git commit -m"fixed remote conflict"
[dev 8a954f4] fixed remote conflict
$ git push origin dev
Object count: 6, complete
Delta compression using up to 4 threads.
Compressed objects: 100% (6 / 6), complete
Write to object: 100% (6 / 6), 570 bytes | 0 bytes / s, complete
Total 6 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 2 local objects.
To [email protected]:findmoon/newrepo.git
5a15ca7..8a954f4 dev -> dev
Pull and push are completed.
Another little partner directlygit pull
, keep updated with the remote library, and the remote library content will be merged locally.
$ git pull origin dev
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 4), reused 6 (delta 4), pack-reused 0
Expanded objects: 100% (6 / 6), complete
come from https://github.com/findmoon/newrepo
* branch dev -> FETCH_HEAD
5a15ca7..8a954f4 dev -> origin/dev
Update 5a15ca7 8a954f4
Fast-forward
readme.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Suggestions on working mode of multi person cooperation
- First, you can try to use
git push origin branch-name
Push your own modifications- If the push fails, the remote branch needs to be used first because it is newer than your local branch
git pull
Attempt to merge- If there is a conflict in the merge, resolve the conflict and submit locally
- No conflict or after resolving the conflict, use it again
git push origin branch-name
Push will succeed